UNPKG

leds-spark-lib

Version:

Biblioteca de geração de código

123 lines (109 loc) 4.04 kB
import { expandToStringWithNL, isLocalEntity, isModule } from "../../../../models/model.js"; import fs from "fs"; import path from "path"; export function generate(model, target_folder) { const common_folder = target_folder + '/Common'; const entities_folder = target_folder + '/Entities'; fs.mkdirSync(common_folder, { recursive: true }); fs.mkdirSync(entities_folder, { recursive: true }); fs.writeFileSync(path.join(common_folder, `BaseRepository.cs`), generateBase(model)); fs.writeFileSync(path.join(common_folder, `UnitOfWork.cs`), generateUnitOfWork(model)); const modules = model.abstractElements.filter(isModule); for (const mod of modules) { for (const cls of mod.elements.filter(isLocalEntity)) { fs.writeFileSync(path.join(entities_folder, `${cls.name}Repository.cs`), generateEntityRepository(model, cls)); } } } function generateBase(model) { return expandToStringWithNL ` using ${model.configuration?.name}.Domain.Common; using ${model.configuration?.name}.Domain.Interfaces.Common; using ${model.configuration?.name}.Infrastructure.Context; using Microsoft.EntityFrameworkCore; namespace ${model.configuration?.name}.Infrastructure.Repositories.Common { public class BaseRepository<T> : IBaseRepository<T> where T : BaseEntity { protected readonly AppDbContext Context; protected readonly DbSet<T> DbSet; public BaseRepository(AppDbContext context) { Context = context; DbSet = Context.Set<T>(); } public async Task Create(T entity) { await Context.AddAsync(entity); } public async Task Delete(T entity) { entity.Delete(); await Task.Run(() => Context.Remove(entity), new CancellationToken()); } public async Task Update(T entity) { await Task.Run(() => Context.Update(entity), new CancellationToken()); } public IQueryable<T> GetAll() { return Context.Set<T>() .AsSplitQuery().AsQueryable(); } public IQueryable<T> GetById(Guid id) { return Context.Set<T>().Where(x => x.Id == id).AsNoTracking().AsQueryable(); } public async Task<bool> Any(Guid id) { return await Context.Set<T>().AnyAsync(x => x.Id.Equals(id)); } public void DeleteRange(ICollection<T> entities) { Context.Set<T>().RemoveRange(entities); } public void AddRange(ICollection<T> entities) { Context.Set<T>().AddRange(entities); } } }`; } function generateUnitOfWork(model) { return expandToStringWithNL ` using ${model.configuration?.name}.Domain.Interfaces.Common; using ${model.configuration?.name}.Infrastructure.Context; namespace ${model.configuration?.name}.Infrastructure.Repositories { public class UnitOfWork : IUnitOfWork { private readonly AppDbContext _context; public UnitOfWork(AppDbContext context) { _context = context; } public async Task Commit(CancellationToken cancellationToken) { await _context.SaveChangesAsync(cancellationToken); } } } `; } function generateEntityRepository(model, cls) { return expandToStringWithNL ` using ${model.configuration?.name}.Domain.Entities; using ${model.configuration?.name}.Domain.Enums; using ${model.configuration?.name}.Domain.Interfaces.Entities; using ${model.configuration?.name}.Infrastructure.Context; using ${model.configuration?.name}.Infrastructure.Repositories.Common; using Microsoft.EntityFrameworkCore; namespace ${model.configuration?.name}.Infrastructure.Repositories.Entities { public class ${cls.name}Repository : BaseRepository<${cls.name}>, I${cls.name}Repository { public ${cls.name}Repository(AppDbContext context) : base(context) { } } }`; } //# sourceMappingURL=generator.js.map