session-companion/SessionCompanion/SessionCompanion.Services/Services/CharacterService.cs

101 lines
4.6 KiB
C#
Raw Normal View History

using AutoMapper;
using SessionCompanion.Database.Repositories.Base;
using SessionCompanion.Database.Tables;
using SessionCompanion.Services.Base;
using SessionCompanion.Services.Interfaces;
using SessionCompanion.ViewModels.CharacterViewModels;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore;
using AutoMapper.QueryableExtensions;
using System.IO;
using Newtonsoft.Json.Linq;
2021-01-04 00:58:31 +01:00
using SessionCompanion.ViewModels.UniversalModels;
using SessionCompanion.Services.Helpers;
namespace SessionCompanion.Services.Services
{
public class CharacterService : ServiceBase<CharacterViewModel, Character>, ICharacterService
{
public CharacterService(IMapper mapper, IRepository<Character> repository) : base(mapper, repository)
{ }
/// <summary>
/// Funkcja zwraca listę postaci przypisanych do podanego użytkownika
/// </summary>
/// <param name="userId">identyfikator użytkownika</param>
/// <returns>Lista postaci dosępnych dla podanego użytkownika</returns>
public async Task<IEnumerable<CharacterForLoginViewModel>> GetUserLoginCharacters(int userId)
{
var characters = await Repository.Get(c => c.UserId.Equals(userId))
.Include(x => x.Biography)
.Include(x => x.Statistics)
.Include(x => x.Biography).ThenInclude(b => b.Class).ToListAsync();
var result = Mapper.Map<IEnumerable<CharacterForLoginViewModel>>(characters);
return result;
}
/// <summary>
/// Funkcja zwraca podstawowy widok postaci na podstawie ich id
/// </summary>
2020-12-21 13:30:59 +01:00
/// <param name="charactersId">Lista identyfikatorów postaci</param>
/// <returns>Podstawowy widok podanych postaci</returns>
public async Task<IEnumerable<CharacterBasicStatsViewModel>> GetBasicCharactersData(List<int> charactersId)
{
2020-12-21 13:30:59 +01:00
var characters = await Repository.Get(c => charactersId.Contains(c.Id))
.Include(x => x.Biography)
2020-12-27 21:17:00 +01:00
.ThenInclude(x => x.Class)
2020-12-21 13:30:59 +01:00
.Include(x => x.Statistics).ToListAsync();
var result = Mapper.Map<IEnumerable<CharacterBasicStatsViewModel>>(characters);
return result;
}
2021-01-03 19:49:37 +01:00
/// <summary>
/// Funkcja zwraca wszystkie statystyki danej postaci
/// </summary>
/// <param name="characterId">indentyfikator postaci</param>
/// <returns>ViewModel z statystykami postaci</returns>
public async Task<CharacterEveryStatViewModel> GetCharacterEveryStat(int characterId)
{
var character = await Repository.Get(c => c.Id.Equals(characterId))
.Include(x => x.Intelligence)
.Include(x => x.Strength)
.Include(x => x.Wisdom)
.Include(x => x.Charisma)
.Include(x => x.Constitution)
.Include(x => x.Dexterity).SingleAsync();
var result = Mapper.Map<CharacterEveryStatViewModel>(character);
return result;
}
2021-01-04 00:58:31 +01:00
/// <summary>
/// Funkcja zwraca listę, zawierającą statystyki danej postaci
/// </summary>
/// <param name="characterId"></param>
/// <returns>lista zawierającą statystyki danej postaci</returns>
public async Task<List<UniversalStatisticViewModel>> GetCharacterStatistics(int characterId)
{
List<UniversalStatisticViewModel> statistics = new List<UniversalStatisticViewModel>();
var character = await Repository.Get(c => c.Id.Equals(characterId))
.Include(x => x.Intelligence)
.Include(x => x.Strength)
.Include(x => x.Wisdom)
.Include(x => x.Charisma)
.Include(x => x.Constitution)
.Include(x => x.Dexterity)
.SingleAsync();
statistics.Add(CustomMappings.MapCharisma(character.Charisma));
statistics.Add(CustomMappings.MapDexterity(character.Dexterity));
statistics.Add(CustomMappings.MapConstitution(character.Constitution));
statistics.Add(CustomMappings.MapIntelligence(character.Intelligence));
statistics.Add(CustomMappings.MapStrength(character.Strength));
statistics.Add(CustomMappings.MapWisdom(character.Wisdom));
return statistics;
}
}
}