Skip to content
This repository was archived by the owner on Dec 27, 2024. It is now read-only.

Commit 48f993d

Browse files
doc/Добавил информации про проект (#2)
* doc/Добавил информации про проект * doc/Добавил размышления про 3нф команд пользователей * doc/Добавил размышления базу данных + ее содержание + примерная схема бд
1 parent f16f248 commit 48f993d

File tree

6 files changed

+193
-0
lines changed

6 files changed

+193
-0
lines changed

docs/api/requests.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# POST (create)
2+
## user
3+
1. /auth/register (user): зарегистрировать пользователя.
4+
2. /auth/login (user): вход в приложение.
5+
3. /auth/logout (user): выход из приложения.
6+
7+
## cf user
8+
1. /cf/user (cf_user): добавить пользователя с платформы codeforces.
9+
10+
## cf users team
11+
1. /cf/teams (team): добавить команду пользователей платформы codeforces.
12+
13+
## groups
14+
1. /groups/solo (group): создать группу cf пользователей.
15+
2. /groups/team (group): создать группу команд cf пользователей.
16+
17+
# GET (read)
18+
## cf user
19+
1. /cf/user (id): получить пользователя с платформы codeforces по id в нашей БД.
20+
21+
## cf users team
22+
1. /cf/teams (id): получить команду пользователей платформы codeforces по id в нашей БД.
23+
24+
## groups
25+
1. /groups/solo (id): получить группу cf пользователей по id в нашей БД.
26+
2. /groups/team (id): получить группу команд cf пользователей по id в нашей БД.
27+
28+
# PUT (update)
29+
30+
## cf user
31+
1. /cf/user (cf_user): обновить пользователя с платформы codeforces.
32+
33+
## cf users team
34+
1. /cf/teams (team): обновить команду пользователей платформы codeforces.
35+
36+
## groups
37+
1. /groups/solo (group): овить группу cf пользователей.
38+
2. /groups/team (group): обновить группу команд cf пользователей.бно
39+
40+
# DELETE (delete)
41+
42+
1. /auth/{id}: удалить пользователя под его id + удалить все его группы.
43+
44+
## cf user
45+
1. /cf/user (id): удалить пользователя с платформы codeforces.
46+
47+
## cf users team
48+
1. /cf/teams (id): удалить команду пользователей платформы codeforces.
49+
50+
## groups
51+
1. /groups/solo (id): удалить группу cf пользователей.
52+
2. /groups/team (id): удалить группу команд cf пользователей.бно
53+

docs/assets/db_base_schema.png

10.5 KB
Loading

docs/dataModel/db_schema.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Variant 1
2+
3+
## Таблицы
4+
5+
t_users:
6+
1. id - pk, int
7+
2. c_login - not_null, unique, string
8+
3. c_hashed_password - not null, string
9+
10+
t_cf_users_team_groups:
11+
1. id - pk, int
12+
2. c_user_id - fk на t_user (id), int
13+
3. c_name - not null, string
14+
4. с_time - not null, timestamp
15+
16+
t_cf_teams: hard_code
17+
1. id - pk, int
18+
2. c_first_user (login) - string
19+
3. c_second_user (login) - string
20+
4. c_third_user (login) - string
21+
5. c_group_id - fk на t_cf_users_team_group (id), int
22+
6. c_name - not null, string
23+
7. c_description - string
24+
8. с_time - not null, timestamp
25+
26+
t_cf_users_groups:
27+
1. id - pk, int
28+
2. c_user_id - fk на t_user (id), int
29+
3. c_name - not null, string
30+
4. с_time - not null, timestamp
31+
32+
t_cf_users:
33+
1. id - pk, int
34+
2. c_cf_login - not null, string
35+
3. c_cf_user_group_id - fk на t_cf_user_group(id), int
36+
4. c_description - string
37+
5. с_time - not null, timestamp
38+
39+
# Примерная схема (не самая красивая)
40+
41+
![context](../assets/db_base_schema.png)

docs/dataModel/modelReview.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# База
2+
Приложение для спортивных программистов.
3+
4+
Основная аудитория: пользователи [codeforces](https://codeforces.com/)
5+
6+
Проблема: сложно следить за результатами "друзей" (чем их больше, тем сложнее следить за их прогрессом).
7+
8+
Идея: сделать приложение, которое бы упростило мониторинг результатов "друзей".
9+
10+
Базовая идея: дать возможность разделять "друзей" на группы и мониторить эти группы.
11+
12+
13+
F1: В самой базовой версии будем мониторить рейтинг пользователей, так как рейтинг - самое главное
14+
на платформе [codeforces](https://codeforces.com/).
15+
16+
F2: Олимпиады по спортивному программированию делятся на два вида: одиночные и командные. В командных участвуют
17+
по 3 человека. Есть смысл оценивать рейтинг таких команд по [примеру](https://codeforces.com/blog/entry/129887),
18+
то есть добавить возможность мониторить команды пользователей.
19+
20+
PS: Пользователи нашего API = User; пользователи Codeforces = CF_USER
21+
22+
# Модели:
23+
## Пользователь (User) нашего приложения:
24+
### Данные:
25+
1. Логин в нашем веб-приложении.
26+
2. Логин на платформе Codeforces?
27+
3. Хэшированный пароль.
28+
29+
### Возможности:
30+
1. Регистрация/ авторизация.
31+
2. CRUD групп CF_USER и групп команд CF_USER.
32+
33+
## Группа CF_USER
34+
### Данные:
35+
1. CF_USER'ы группы.
36+
2. Автор (User) группы.
37+
38+
## Группы команд CF_USER
39+
### Данные:
40+
1. Команды CF_USER'ов группы.
41+
2. Автор (User) группы.
42+
43+
## CF_USER
44+
### Данные:
45+
1. Логин CF_USER на платформе Codeforces.
46+
2. Рейтинг CF_USER на платформе Codeforces. ?
47+
48+
## Команды CF_USER
49+
### Данные:
50+
1. Состав команды из CF_USER.
51+
2. Название команды.

docs/other/remark.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
R1: Рейтинги на [codeforces](https://codeforces.com/) обновляются после каждого раунда. Раунд бывают 1-2 раза в неделю.
2+
Как хранить и обновлять рейтинг пользователей в нашем приложении?
3+
Как будто самый простой вариант = кэшировать данные для анализа (рейтинг). После раунда рейтинг обновляется в течение
4+
24 часов. Будет кэшировать данные на 24 часа. Нет смысла хранить эти данные в бд? Они хранятся в кэше.
5+
6+
R2: Пробовать сделать "вход" через Codeforces? Нет такого метода в [Codeforces API](https://codeforces.com/apiHelp) :(.
7+
8+
R3: Один CF_USER может быть в нескольких разных командах. Как стоит хранить команды? Как проверить, что команда есть в бд?
9+
10+
R4: Дать возможность USER дать какое-то краткое описание CF_USER, которых он к себе добавил. Проблема: Саша добавил
11+
Машу в друзья (ne_masha). Спустя несколько месяцев Саша забыл, кто такой ne_masha. Идея: если было бы краткое описание,
12+
то Саша вспомнил бы, что ne_masha - это Маша.
13+
14+
R4: Использовать jwt токены? jwt токен нужен для методов create, update, delete, logout. Без jwt можно register + login.
15+
16+
R5: Потрачу все свои силы на backend часть (скорее всего не будет красивого интерфейса). Postman наше всё!
17+
18+
Q1: Приводить ли к 3НФ команды? Как будто для простоты работы не стоит этого делать. Потому что слишком сложно и
19+
непонятно, как с этим работать.
20+
21+
Плохой вариант ?: 4 таблицы: user - user_groups - teams - cf-users (храним по отдельности все данные, потом пытаемся
22+
все построить в одного монстра)
23+
Хороший вариант ?: 3 таблицы: user - user_groups - cf-users-team (? не так много данных для конструктора монстра,
24+
то есть мы просто храним объединенную команду, делаем 1 таблицу, вместо 2: cf_user_team (хранит id, название команды,
25+
состав команды из 3 участников), против team (id, название команды) + team_cf-users(id, fk team id, fk user id))).
26+
Также будет потрачено меньше запросов для создания нашего монстра. Это все круто работает до тех пор, пока команды
27+
состоят только из 3 человек. Жесткая привязка к лимиту в 3 человека. Но это слишком привлекательно... Если делать
28+
полное 3нф, то как будто надо будет добавить еще таблицы для описания команды, хранения порядка, в котором были добавлены
29+
пользователи в группу. Получается как будто еще минимум нужно 2 таблицы, а желательно даже 4. Слишком много таблиц для
30+
такого задания. Будет хардкодить :).
31+
32+
33+
Q2: Может нет смысла хранить пользователя как можно более абстрактно? Не делать 3нф, сделать привязку к user.
34+
В кэше хранить дополнительные данные.
35+
36+
Q3: Надо же хранить как-то порядок пользователей в его группе? Или просто по времени добавления?
37+
38+
39+

docs/requirements/requirements.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# База:
2+
3+
## Функциональные требования:
4+
1. Должна быть возможность зарегистрироваться и войти в приложение.
5+
2. У пользователя должна быть возможность создавать группы из пользователей платформы
6+
[codeforces](https://codeforces.com/) и из команд таких пользователей. P.S. В команде от 1 до 3 человек + ее название.
7+
3. У пользователя должен быть полный CRUD с его группами.
8+
4. У пользователя должна быть возможность дать какое-то краткое описание тому, что он добавляет (одного пользователя
9+
или сразу всю группу).

0 commit comments

Comments
 (0)