# PC accounting
## Задачи Rendre♿:
✅
#### Обучение:
- Реализовать класс DateTime (год месяц день часы минуты секунды, добавление секунд минут итд, сравнение сложение вычитание, перевести дату в секунды минуты
- часы: 1 год = 365 дней)
#### Сделано
- Скачивание по ID (API для файлов)♿✅
- Регистрация/логин в сервисы SharedKernel♿✅
- Активация исправить♿✅
- Все репозитории в методах GetItems добавить uint skip, uint take (описано ниже)♿✅
- Во все репозитории добавить методы GetItemsCount() (описано ниже)♿✅
- DI♿✅
- try catch в контроллерах + Logger♿✅
- Реализовать паттерн Unit of Work♿✅
- Поменять Mysql.Data на MysqlConnector♿✅
#### Теория
- В чем смысл [ApiController] и ControllerBase
- Отличие delegate от event ✅
- IEnumerable vs IQueryable ✅
- Жизненные циклы в контейнере
- Делегаты (Action, Predicate, Func!♿, Expression!)
#### Первый приоритет
- Юзеры с ролями (API + проверка на права + enum) (своя реализация) - потом на асп нет
- Скачивание файла по URL (выдаются на время, конкретному пользователю)
- Обновление данных по сокетам
- Чатик
- Дополнительные свойства для компьютера (таблицы в бд: Properties (название свойства, тип данных), ComputerProperties(значение, тип свойства, computerID) )
#### Второй приоритет
- Декстоп клиент использующий WebAPI
- Проверка на логин аннотацией
- Фронт на MVC ASP NET
#### Пофик(нет)
- Тесты на контроллеры/репозитории
- Фронт на Angular!/React!!/Vue
---
```
Пользователь: добавляет инфу
Модератор: (все что пользователь) + изменяет инфу
Админ: (все что модератор) + удаляет инфу + выдает роли
```
---
### Модуль пользователи
#### [GET] /User/[id]
in
```javascript
"token": string,
"id": ulong,
```
out
```javascript
"success": byte,
"access": byte,
"data": {
"login" : string,
"employerID": ulong,
},
"list": [{
"id": ulong,
"login": string,
"employerID": ulong,
}],
```
#### [DELETE] /User/[id]
in
```javascript
"token": string,
"id": ulong,
```
out
```javascript
"success": byte,
"access": byte,
```
#### [POST] /User/
in
```javascript
"token": string,
"data": {
"login" : string,
"password": string,
"employerID": ulong,
}
```
out
```javascript
"success": byte,
"access": byte,
```
#### [PUT] /User/
in
```javascript
"token": string,
"id": ulong,
"data": {
"login" : string,
"password": string,
"employerID": ulong,
},
```
out
```javascript
"success": byte,
"access": byte,
```
### Модуль работники
#### [GET] /Employer/[id]
in
```javascript
```
out
```javascript
"success": byte,
"data": {
"name": string,
"position": string,
"tel": string,
},
"list": [{
"id": ulong,
"name": string,
"position": string,
"tel": string,
}],
```
#### [DELETE] /Employer/[id]
in
```javascript
```
out
```javascript
"success": byte,
```
#### [POST] /Employer/
in
```javascript
"name": string,
"position": string,
"tel": string,
```
out
```javascript
"success": byte,
"id": ulong,
```
#### [PUT] /Employer/
in
```javascript
"id": ulong, // Обязательно
"name": string,
"position": string,
"tel": string,
```
out
```javascript
"success": byte,
"id": ulong,
```
### Модуль компьютеры
#### [POST] /ParseComp/
in
```javascript
"token": string,
"id": ulong,
"list": byte,
"name": string, //
"status": byte, //
"employerID": ulong, //
"date": DateTime, //
"cpu": string, //
"price": decimal,
"comp": {
"id": ulong, //
"del": byte, //
"name": string, // Обязательно имя компьютера
"status": byte,
"employerID": ulong,
"date": DateTime,
"cpu": string,
"price": decimal,
},
"data": [{
"field": string,
"value": string,
}],
```
out
```javascript
"success": byte,
"access": byte, //
"data": {
"name": string,
"status": byte,
"employerID": ulong,
"date": DateTime,
"cpu": string,
"price": decimal,
},
"list": [{
"id": ulong,
"name": string,
"status": byte,
"employerID": ulong,
"date": DateTime,
"cpu": string,
"price": decimal,
}],
```
```javascript
"data":
[{
"field": "Name",
"value": "Amd"
},
{
"field": "StatusID",
"value": "2"
}]
```