Разработать backend на C#.

Сергей12 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
31.07.2017

Добрый день!

Требуется разработка бэкенда для мобильного приложения. Необходимо разработать серию методов.

При подаче заявки прошу указать сроки и стоимость.

Описание задачи:

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