Projekt

Obecné

Profil

Stáhnout (2.49 KB) Statistiky
| Větev: | Tag: | Revize:
1 055ef5b5 Vojtěch Bartička
using AutoMapper;
2
using Core.Contexts;
3
using Models.Tags;
4
using Serilog;
5
using System;
6
using System.Collections.Generic;
7
using System.Linq;
8
using System.Text;
9
using System.Threading.Tasks;
10
11
namespace Core.Services.TagService
12
{
13
    public class TagServiceEF : ITagService
14
    {
15
        private readonly DatabaseContext databaseContext;
16
        private readonly ILogger logger;
17
        private readonly IMapper mapper;
18
19
        public TagServiceEF(DatabaseContext databaseContext, ILogger logger, IMapper mapper)
20
        {
21
            this.databaseContext = databaseContext;
22
            this.logger = logger;
23
            this.mapper = mapper;
24
        }
25
26
        public TagTreeResponse GetTagTree()
27
        {
28 ecb333b6 Vojtěch Bartička
            // Prefetch from DB
29 f3c42457 Vojtěch Bartička
            var tagCategories = databaseContext.TagCategories
30
                .Select(tc => tc)
31
                .OrderBy(tc => tc.Name)
32
                .ToList();
33
34
            var tags = databaseContext.Tags
35
                .Select(tc => tc)
36
                .ToList();
37
38
            var subTags = databaseContext.SubTags
39
                .Select(tc => tc)
40
                .ToList();
41 ecb333b6 Vojtěch Bartička
42 055ef5b5 Vojtěch Bartička
            var tagCategoriesDTOs = new List<TagCategoryInfo>();
43
            foreach (var tagCategory in tagCategories)
44
            {
45
                var tagCategoryDTO = mapper.Map<TagCategoryInfo>(tagCategory);
46 f3c42457 Vojtěch Bartička
                var categoryTags = tags
47
                    .Where(t => t.Category == tagCategory)
48
                    .OrderBy(t => t.Name);
49
50 055ef5b5 Vojtěch Bartička
                var tagDTOs = new List<TagInfo>();
51
52 ecb333b6 Vojtěch Bartička
                foreach (var tag in categoryTags)
53 055ef5b5 Vojtěch Bartička
                {
54
                    var tagDTO = mapper.Map<TagInfo>(tag);
55 f3c42457 Vojtěch Bartička
                    var tagSubTags = subTags
56
                        .Where(st => st.Tag == tag)
57
                        .OrderBy(st => st.Name)
58
                        .ToList();
59
60 055ef5b5 Vojtěch Bartička
                    var subTagDTOs = new List<SubTagInfo>();
61
62 ecb333b6 Vojtěch Bartička
                    if (tagSubTags.Count() != 0)
63 055ef5b5 Vojtěch Bartička
                    {
64 ecb333b6 Vojtěch Bartička
                        foreach (var subTag in tagSubTags)
65 055ef5b5 Vojtěch Bartička
                        {
66
                            subTagDTOs.Add(mapper.Map<SubTagInfo>(subTag));
67
                        }
68
                    }
69
                    tagDTO.SubTags = subTagDTOs;
70
                    tagDTOs.Add(tagDTO);
71
                }
72
73
                tagCategoryDTO.Tags = tagDTOs;
74
                tagCategoriesDTOs.Add(tagCategoryDTO);
75
            }
76
77
            return new TagTreeResponse()
78
            {
79
                TagCategories = tagCategoriesDTOs
80
            };
81
        }
82
    }
83
}