# 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" }] ```