Skip to content

LinkCatList/test-golang-LinkCatList-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 

Repository files navigation

test-golang-LinkCatList-

Все эндпоинты начинаются с префикса /api

/ping

Реализуется возврат успешного ответа (с кодом 200) на запрос GET /api/ping. Содержимое тела ответа при этом не валидируется, возвращается "ok".

/countries

Есть собственный словарь стран, который используется при регистрации пользователей и может учитываться рекомендательными системами и системой локализации контента.

Про каждую страну известны следующие данные:

{
    "name": "полное название",
    "alpha2": "двухбуквенный код страны (в верхнем регистре)",
    "alpha3": "трехбуквенный код страны",
    "region": "географический регион"
}

Реализованы следующие эндпоинты:

  • GET /countries — получить список доступных стран, доступна фильтрация по регионам.

  • GET /countries/{alpha2} — получить страну по её уникальному двухбуквенному коду.

Данные находятся в таблице countries, которая имеет следующее определение:

CREATE TABLE countries (
    id SERIAL PRIMARY KEY,
    name TEXT,
    alpha2 TEXT,
    alpha3 TEXT,
    region TEXT
);

INSERT INTO countries (name, alpha2, alpha3, region) VALUES
    ('Åland Islands','AX','ALA','Europe'),
    ('Albania','AL','ALB','Europe'),
    ...;

/auth/register

Эндпоинт /auth/register используется для первичной регистрации пользователей.

Сервер поддерживает базу данных пользователей, валидирует запросы и не допускает наличия пользователей с эквивалентными регистрационными данными.

/auth/sign-in

Эндпоинт /auth/sign-in предназначен для аутентификации пользователя по логину и паролю и генерации сессионного токена, который в дальнейшем будет использоваться для генерации запросов.

Генерируется JWT токен, который в дальнейшем передается пользователем в заголовке Authorization: Bearer {token} и приложение понимает, какой пользователь хочет сделать запрос. Время действия токена 12 часов.

/me

Эндпоинт /me/profile используется для получения и редактирования параметров собственного профиля пользователя. Действие зависит от указанного метода (GET и PATCH).

Сервер идентифицирует пользователя по переданному токену. Значение токена подставляется в заголовок Authorization в формате Bearer {token}. Например, Authorization: Bearer $deddz$@pp....

В запросе на редактирование профиля передаются значения только тех полей, которые необходимо обновить.

/profiles

Эндпоинт /profiles/{login} позволяет получить профиль другого пользователя по логину.

Профиль можно получить только если данный пользователь имеет публичный профиль (параметр isPublic), либо находится у вас в друзьях.

/password

С помощью /me/updatePassword у пользователя появляется возможность изменить пароль от своего аккаунта.

После изменения пароля:

  • Аутентификация со старым паролем становится невозможной.

  • Все ранее выпущенные токены должны быть отозваны. Использование старых токенов становится равнозначным использованию некорректных токенов.

После успешной смены пароля при попытке получить свой профиль со старым токеном пользователь получает ошибку.

/friends

В приложении есть возможность добавлять и удалять других пользователей из списка своих друзей. И конечно же можно посмотреть список своих друзей.

Свойство быть другом — одностороннее. Если Петя добавит Машу в друзья, то профиль Пети становится доступным для Маши, даже если у Пети закрытый профиль.

Чтобы не нагружать сервера и клиенты слишком сильно, в запросах на получение списка друзей используется пагинация. С помощью параметров offset и limit можно "постранично" получить весь список друзей, запрашивая данные порционно.

Запоминается дата и время последнего добавления в друзья для корректной сортировки и пагинации.

/posts/publish

Возможность создавать публикации со стороны пользователей. Затрагиваемые эндпоинты:

  • /posts/new
  • /posts/{postId}

Сервер должен генерировать уникальные идентификаторы и запоминать время создания публикаций.

У пользователя есть доступ к своим постам, постам пользователей с публичным профилем и постам других пользователей, которые добавили данного пользователя в друзья.

/posts/feed

Новостная лента своих или чужих постов.

Есть запросы на /posts/feed/my и /posts/feed/{login} (значение my не может являться логином).

/posts/likes

Пользователи могут поставить лайк и дизлайк публикации, к которой у них есть доступ.

Всегда запоминается последняя реакция пользователя. Если пользователь поставил лайк два раза подряд, эффект лайка остается. Если пользователь поставил лайк, а потом дизлайк, остается реакция дизлайка.

В полях likesCount и dislikesCount необходимо отражается число лайков и дизлайков публикации, при этом от каждого пользователя учитывается только его самая последняя реакция.

/posts/search

Предоставляет возможность поиска постов по префиксу и тегам. Поиск осуществляется только по тем постам, к которым есть доступ.

Start server 🍉

cd solution/cmd
systemctl start docker
sudo docker run --name=video-db -e POSTGRES_PASSWORD='qwerty' -p 1337:5432 -d --rm postgres
migrate -path ../migration -database 'postgres://postgres:qwerty@localhost:1337/postgres?sslmode=disable' up
go run main.go server.go

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published