diff --git a/README.md b/README.md index 216dfc2a..f90aed1c 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ MVP аналога популярной соц. сети для обмена ф ## Ссылка на приложение: -https:: +https://alena-sartakova.github.io/ ## Первоначальная оценка -ХХХХ часов +35 часов ## Фактически затраченное время -YYYY часов +30 часов diff --git a/api.js b/api.js index 8997c44d..fd22019c 100644 --- a/api.js +++ b/api.js @@ -1,6 +1,9 @@ // Замени на свой, чтобы получить независимый от других набор данных. + +import { sanitizeHtml } from "./helpers.js"; + // "боевая" версия инстапро лежит в ключе prod -const personalKey = "prod"; +const personalKey = "alenka-s"; const baseHost = "https://webdev-hw-api.vercel.app"; const postsHost = `${baseHost}/api/v1/${personalKey}/instapro`; @@ -13,6 +16,7 @@ export function getPosts({ token }) { }) .then((response) => { if (response.status === 401) { + throw new Error("Нет авторизации"); } @@ -28,9 +32,9 @@ export function registerUser({ login, password, name, imageUrl }) { return fetch(baseHost + "/api/user", { method: "POST", body: JSON.stringify({ - login, - password, - name, + login: sanitizeHtml(login), + password: sanitizeHtml(password), + name: sanitizeHtml(name), imageUrl, }), }).then((response) => { @@ -68,3 +72,84 @@ export function uploadImage({ file }) { return response.json(); }); } +//посты пользователя +export function fetchPostsUser(id, { token }) { + return fetch(`${postsHost}/user-posts/${id}`, { + method: "GET", + headers: { + Authorization: token, + }, + }) + .then((response) => { + if (response.status === 401) { + throw new Error("Нет авторизации"); + } + return response.json(); + }) + .then((data) => { + return data.posts; + }); +} +//новый пост +export const userPosts = ({ token, description, imageUrl }) => { + return fetch(postsHost, { + method: "POST", + body: JSON.stringify({ + description: sanitizeHtml(description), + imageUrl, + }), + headers: { + Authorization: token, + } + }) + .then((response) => { + if (response.status === 500) { + throw new Error("Сервер упал"); + } else if (response.status === 400) { + throw new Error("Плохой запрос"); + } else { + return response.json(); + } + }) + +} + +//лайки +export const getLike = (id, { token }) => { + return fetch(`${postsHost}/${id}/like`, { + method: "POST", + headers: { + Authorization: token, + } + }) + .then((response) => { + if (response.ok) { + return response.json(); + } + throw new Error(`Нет авторизации`); + }) + .catch((error) => { + // alert('Вы не авторизованы!') + throw error; + }); + +}; + +export const getDislike = (id, { token }) => { + return fetch(`${postsHost}/${id}/dislike`, { + method: "POST", + headers: { + Authorization: token, + } + }) + .then((response) => { + if (!response.ok) { + throw new Error(`Ошибка ${response.status}: ${response.statusText}`); + } + return response.json(); + }) + .catch((error) => { + console.error("Ошибка при удалении лайка:", error); + throw error; + }); +}; \ No newline at end of file diff --git a/components/add-post-page-component.js b/components/add-post-page-component.js index 59554d86..7663ad0b 100644 --- a/components/add-post-page-component.js +++ b/components/add-post-page-component.js @@ -1,20 +1,54 @@ +import { sanitizeHtml } from "../helpers.js"; +import { renderHeaderComponent } from "./header-component.js"; +import { renderUploadImageComponent } from "./upload-image-component.js"; + + +let imageUrl = ""; export function renderAddPostPageComponent({ appEl, onAddPostClick }) { const render = () => { // TODO: Реализовать страницу добавления поста const appHtml = `
- Иван Иваныч
-
- - Нравится: 2 -
-- Иван Иваныч - Ромашка, ромашка... -
-- 19 минут назад -
-
- Варварва Н.
+${sanitizeHtml(post.user.name)}
+ - Варварва Н. - Нарисовала картину, посмотрите какая красивая + ${sanitizeHtml(post.user.name)} + ${post.description}
- 3 часа назад + ${formatDistanceToNow(new Date(post.createdAt), { locale: ru })} назад
-
- Варварва Н.
-- Нравится: 0 -
-- Варварва Н. - Голова -
-- 8 дней назад -
-\r\n ${isLoginMode ? \"Нет аккаунта?\" : \"Уже есть аккаунт?\"}\r\n
${(0,_helpers_js__WEBPACK_IMPORTED_MODULE_4__.sanitizeHtml)(post.user.name)}
\r\n\r\n Нравится: \r\n ${post.likes.length === 0 ? 0 : post.likes.length === 1 ? post.likes[0].name : post.likes[(post.likes.length - 1)].name + ' и еще ' + (post.likes.length - 1)}\r\n \r\n
\r\n\r\n ${(0,_helpers_js__WEBPACK_IMPORTED_MODULE_4__.sanitizeHtml)(post.user.name)}\r\n ${post.description}\r\n
\r\n\r\n ${(0,date_fns__WEBPACK_IMPORTED_MODULE_5__.formatDistanceToNow)(new Date(post.createdAt), { locale: date_fns_locale__WEBPACK_IMPORTED_MODULE_6__.ru })} назад\r\n
\r\n