Количество просмотров поста в ASP.NET Web API

219
03 мая 2017, 07:43

Здравствуйте. Недавно сделал небольшой проект на базе ASP.NET Web API 2. На клиентской части использую Angular. Проект представляет из себя небольшой блог.

Пост имеет поле ViewCount.

Как реализовать подсчет количества просмотров поста? И чтобы при перезапуске (F5), счетчик не увеличивался.

Возможно есть готовый кусок кода или советы по реализации?

Спасибо всем кто отзовется.

Answer 1

Посидев подумав немного я решил использовать следующую реализацию данного функционала.

Снизу приведен пример менеджера, который отвечает за установку/вывод количества просмотров поста (лота):

public class LotViewesManager: EntitiesManager
{
    public async Task<int> GetLotViewersCountAsync(Guid lotId)
    {
        var lot = await GetByIdAsync<Lot>(lotId);
        if (lot != null)
        {
            var lotViewes = await GetListAsync(
                filters: new List<Expression<Func<LotViewes, bool>>>
                {
                    x => x.LotId == lot.Id
                });
            return lotViewes.First().ViewersIds.Count;
        }
        throw new InvalidInputParameterException();
    }
    public async Task UpdateLotViewesAsync(Guid lotId, Guid viewerId)
    {
        var lot = await GetByIdAsync<Lot>(lotId);
        if (lot != null)
        {
            var lotViewes = await GetListAsync(
                filters: new List<Expression<Func<LotViewes, bool>>>
                {
                    x => x.LotId == lot.Id
                });
            lotViewes.First().ViewersIds.Add(viewerId);
            await Save(lotViewes.First());
            return;
        }
        throw new InvalidInputParameterException();
    }
    public async Task SaveAsync(LotViewes lotViewes)
    {
        await Save(lotViewes);
    }
}

Сама сущность, которая сохраняет все в БД:

public class LotViewes : Entity 
{
    public Guid LotId { get; set; }
    public List<Guid> ViewersIds { get; set; }
    public LotViewes()
    {
        ViewersIds = new List<Guid>();
    }
}

Спасибо всем за советы =)

READ ALSO
Построение маршрута c использованием gmap.net

Построение маршрута c использованием gmap.net

В приложении на C#, с использованием библиотеки Gmapnet необходимо построить маршрут между двумя точками

629
Ошибка аутентификации в SSL

Ошибка аутентификации в SSL

Здравствуйте, есть следующий простой пример Smtp клиента с отправкой тестового письма:

438
Неочевидное поведение итераторов

Неочевидное поведение итераторов

В одной книге встретил вот такое высказывание:

345