Escali License control 1
ModuleService.cs
Gå til dokumentasjonen til denne filen.
3using Microsoft.EntityFrameworkCore;
4
6{
7
11public class ModuleService
12{
13
14 private readonly DataContext _db;
15
17 {
18 _db = db;
19 }
20
25 public async Task<List<Module>> GetAllModules()
26 {
27 var res = await _db.Modules
28 .Include(m => m.ModuleLevels)
29 .ToListAsync();
30 return res;
31 }
32
39 public async Task<Module> GetModuleById(int id)
40 {
41 var res = await _db.Modules.FindAsync(id);
42 return res;
43 }
44
51 public async Task<Module> AddModule(Module module)
52 {
53 if (_db.Modules.Any(m => m.ModuleName == module.ModuleName && m.ProductSeq == module.ProductSeq))
54 throw new InvalidOperationException($"Modul med navn '{module.ModuleName}' finnes allerede.");
55
57
58 var res = _db.Modules.Add(module);
59 await _db.SaveChangesAsync();
60
61 // var newModule = await _db.Modules
62 // .Where(m => m.ModuleSeq == res.Entity.ModuleSeq)
63 // .Include(m => m.ModuleLevels)
64 // .SingleOrDefaultAsync();
65 //
66 // if (newModule == null)
67 // {
68 // throw new InvalidOperationException("Module ble ikke lagt til");
69 // }
70 _db.ChangeTracker.Clear();
71
72 return res.Entity;
73 }
74
82 public async Task<Module> UpdateModule(Module module)
83 {
84 if (_db.Modules.Any(m => m.ModuleName == module.ModuleName && m.ProductSeq == module.ProductSeq && m.ModuleSeq != module.ModuleSeq))
85 throw new InvalidOperationException($"Modul med navn '{module.ModuleName}' finnes allerede.");
86
88
89 _db.Entry(module).State = EntityState.Modified;
90 module.ModuleLevels.ForEach(ml => _db.Entry(ml).State = _db.Entry(ml).Entity.ModuleLevelSeq != 0 ? EntityState.Modified : EntityState.Added);
91
92 await _db.SaveChangesAsync(); // TODO Lag metode for save and clear
93
94 _db.ChangeTracker.Clear(); // Fixes tracking problems
95
96 return module;
97 }
98
105 public async Task<Module> DeactivateModule(int moduleSeq)
106 {
107 var module = await _db.Modules.FindAsync(moduleSeq);
108 if (module == null) throw new NullReferenceException($"Module with id {moduleSeq} doesn't exist.");
109 module.IsActive = false;
110 var res = await UpdateModule(module);
111 return res;
112 }
113
120 public async Task<Module> ActivateModule(int moduleSeq)
121 {
122 var module = await _db.Modules.FindAsync(moduleSeq);
123 if (module == null) throw new NullReferenceException($"Module with id {moduleSeq} doesn't exist.");
124 module.IsActive = true;
125 var res = await UpdateModule(module);
126 return res;
127 }
128
134 private static void ModuleLevelDuplicateNamesCheck(Module module)
135 {
136 // Check for module level duplicate names
137 if (module.ModuleLevels.GroupBy(ml => ml.ModuleLevelName).Any(item => item.Skip(1).Any()))
138 throw new InvalidOperationException($"Modulnivåer kan ikke ha samme navn.");
139 }
140
141 }
142}
virtual List< ModuleLevel > ModuleLevels
Definition: Module.cs:24
ModuleService class inserts and updates Module in the Database
async Task< Module > GetModuleById(int id)
Read one Module with id from database
static void ModuleLevelDuplicateNamesCheck(Module module)
Checks if modulelevelname exist in Modulelevel table in database
async Task< Module > UpdateModule(Module module)
Updates changes on a Module in the database
async Task< Module > AddModule(Module module)
Adds a Module to the database
async Task< Module > ActivateModule(int moduleSeq)
Activates a Module by setting IsActive attribute to true
async Task< Module > DeactivateModule(int moduleSeq)
Deactivated a Module by setting IsActive attribute to false
async Task< List< Module > > GetAllModules()
Read all Modules from database