Разработать backend на C#.
Добрый день!
Требуется разработка бэкенда для мобильного приложения. Необходимо разработать серию методов.
При подаче заявки прошу указать сроки и стоимость.
Описание задачи:
1. Разработать класс UserAccount.
Поля:
email,
userId,
isAdmin=0 (признак админской учетки, по умолчанию 0)
username,
attr1.. attr5 (текстовые атрибуты)
creationDate,
String (или Int) accountStatus (confirmed, not confirmed) статус акка (можно енумом сделать)
Favorits – массив userIds
2. Реализовать методы сохранения, чтения, поиска данных в БД (МонгоДБ), Redis
3. Реализовать веб-сервис используя C# + ServiceStack .
Опубликованные методы:
CreateAccount
Параметры: String email, String key ,String requestDateTime
Валидируем входные параметры, проверям корректность ключа.
Если валидация прошла успешно и имейла в БД нет то:
Создает новый эккаунт В БД, при этом заполняет поля класса произвольными
(по маске) значениями, возвращает статус OK и данные – сериализованный
в JSON екземпляр класса UserAccount
Если имейл в БД есть, то возвращает статуc Error: AccountExists
Если аккаунт был создан – то присваивает дату создания акканта
(creationDate) и отправляет на почту ссылку для подтверждения эккаунта
В случае ошибки валидации метод возвращает статус Error
UpdateAccount
Параметры: userId , JSON объект содержащий пары поле – значение, key , sessionId , requestDateTime
Валидируем входные параметры, проверям корректность ключа и ИД сессии
В случае если проверка пройдена обновляем запись в БД.
Email и пароль в БД должны храниться в виде соленого хэша
Возвращаем обновленную запись в JSON. (хэши клиенту не возвращаем)
Если проверка не пройдена возвращаем ошибку.
Authenticate
Параметры: email, password, key, requestDateTime
Валидируем входные параметры, проверям корректность ключа
Если валидация пройдена – хешируем email , password и проверяем наличие хеша в БД.
Если проверка пройдена - создаем запись в таблице сессий, возвращаем ID сесии и ИД юзера.
Если проверка не пройдена – возвращаем статус ошибки.
ConfirmAccount
Параметры: email, confirmKey, requestDateTime, key
Валидируем входные параметры, проверям корректность ключа
Если валидация пройдена, находим нужную запись в БД (по email и
confirmKey - userId ) и меняем статус записи (атрибут accountStatus )
на confirmed .
UpdateMyLocation
Параметры: userId, sessionId, key, requestDateTime , долгота и широта (оба Double)
Проверяем валидность данных, проверяем ключ, проверяем сессию
пользователя, проверяем доступность редиски и наличие записи. Если
запись уже есть – обновляем.
Если проверка прошла успешно, записываем в Redis инфу о юзере.
(https://github.com/ServiceStackApps/redis-geo#servicestackredis-geo-apis)
Названия полей которые попадают в редис, должны настраиваться, например, локальным массивом строк.
Время жизни записи в редисе настраивается локальной переменной.
Если ошибок нет, возвращаем статус ОК, иначе Error и описание ошибки.
FindAccsInRadius
Параметры: userId, sessionId, key, requestDateTime, долгота и широта (оба Double), GeoRadius
Проверяем валидность данных, проверяем ключ, проверяем сессию пользователя, проверяем доступность редиски.
Посылаем в редиску запрос Redis.FindGeoResultsInRadius
Возвращаем массив данных в JSON формате. Названия полей которые попадают
в массив, должны настраиваться, например, локальным массивом
строк(названия полей в массиве)
FindAccByAttr
Параметры: userId, sessionId, key, requestDateTime, массив атрибутов со значениями
Может вызываться из админки, админка не генерит кей, если вызывается пользователем с админскими правами – key игнорируем.
Проверяем валидность данных, проверяем ключ, проверяем сессию пользователя, проверяем админ ли пользователь.
Админы могут искать по всем атрибутам, обычные пользователи только по ID .
Возвращаем найденый/ые акк.
В случае ошибки возвращаем статус ошибки.
GetAllUsers
Параметры: userId, sessionId, key, requestDateTime, fromNumber, toNumber
Может вызываться из админки, админка не генерит кей, если вызывается пользователем с админскими правами – key игнорируем
Проверяем валидность данных, проверяем ключ, проверяем сессию пользователя
Проверям админ ли пользователь. Проводим поиск и возвращаем нужную страницу записей.
В случае ошибки валидации или если пользователь не админ возвращаем ошибку.
AddGhost
Параметры userId, sessionId, requestDateTime, timeToLive, массив атрибутов
Может вызываться из админки, админка не генерит кей, если вызывается пользователем с админскими правами – key игнорируем
Проверяем валидность данных, проверяем ключ, проверяем сессию пользователя, проверяем что пользователь админ.
Если проверки пройдены, добавляем запись в Redis .Время жизни записи
определяется входным параметром tuimeToLive . Возвращаем OK если нет
ошибок иначе Error