Projekt

Obecné

Profil

Stáhnout (2.49 KB) Statistiky
| Větev: | Tag: | Revize:
1
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
            // Prefetch from DB
29
            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

    
42
            var tagCategoriesDTOs = new List<TagCategoryInfo>();
43
            foreach (var tagCategory in tagCategories)
44
            {
45
                var tagCategoryDTO = mapper.Map<TagCategoryInfo>(tagCategory);
46
                var categoryTags = tags
47
                    .Where(t => t.Category == tagCategory)
48
                    .OrderBy(t => t.Name);
49

    
50
                var tagDTOs = new List<TagInfo>();
51

    
52
                foreach (var tag in categoryTags)
53
                {
54
                    var tagDTO = mapper.Map<TagInfo>(tag);
55
                    var tagSubTags = subTags
56
                        .Where(st => st.Tag == tag)
57
                        .OrderBy(st => st.Name)
58
                        .ToList();
59

    
60
                    var subTagDTOs = new List<SubTagInfo>();
61

    
62
                    if (tagSubTags.Count() != 0)
63
                    {
64
                        foreach (var subTag in tagSubTags)
65
                        {
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
}
(2-2/2)