Projekt

Obecné

Profil

Stáhnout (2.19 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.Select(tc => tc).ToList();
30
            var tags = databaseContext.Tags.Select(tc => tc).ToList();
31
            var subTags = databaseContext.SubTags.Select(tc => tc).ToList();
32

    
33
            var tagCategoriesDTOs = new List<TagCategoryInfo>();
34
            foreach (var tagCategory in tagCategories)
35
            {
36
                var tagCategoryDTO = mapper.Map<TagCategoryInfo>(tagCategory);
37
                var categoryTags = tags.Where(t => t.Category == tagCategory);
38
                var tagDTOs = new List<TagInfo>();
39

    
40
                foreach (var tag in categoryTags)
41
                {
42
                    var tagDTO = mapper.Map<TagInfo>(tag);
43
                    var tagSubTags = subTags.Where(st => st.Tag == tag).ToList();
44
                    var subTagDTOs = new List<SubTagInfo>();
45

    
46
                    if (tagSubTags.Count() != 0)
47
                    {
48
                        foreach (var subTag in tagSubTags)
49
                        {
50
                            subTagDTOs.Add(mapper.Map<SubTagInfo>(subTag));
51
                        }
52
                    }
53
                    tagDTO.SubTags = subTagDTOs;
54
                    tagDTOs.Add(tagDTO);
55
                }
56

    
57
                tagCategoryDTO.Tags = tagDTOs;
58
                tagCategoriesDTOs.Add(tagCategoryDTO);
59
            }
60

    
61
            return new TagTreeResponse()
62
            {
63
                TagCategories = tagCategoriesDTOs
64
            };
65
        }
66
    }
67
}
(2-2/2)