public static EntityApiRoles AddEntityApi <TKey, TEntity, TDbContext>(this IPlatformModuleBuilder builder, Action <EntityApiBuildContext <TKey, TEntity> > config = null) where TEntity : class where TDbContext : DbContext { var ctx = new EntityApiBuildContext <TKey, TEntity>(); config?.Invoke(ctx); return(new EntityApiRoles { Get = builder.AddGetApi <TKey, TEntity, TDbContext>(ctx.GetConfig), Put = builder.AddPutApi <TKey, TEntity, TDbContext>(ctx.PutConfig), Delete = builder.AddDeleteApi <TKey, TEntity, TDbContext>(ctx.DeleteConfig), Post = builder.AddPostApi <TKey, TEntity, TDbContext>(ctx.PostConfig), Query = builder.AddQueryApi <TEntity, TDbContext>(ctx.QueryConfig) }); }
public static EntityApiBuildContext <TKey, TEntity> SetupFilePipes <TKey, TEntity>( this EntityApiBuildContext <TKey, TEntity> apiBuildContext, Func <IServiceProvider, TEntity, Task <IEnumerable <string> > > findFilesFromModel, Func <IServiceProvider, DbContext, TKey, Task <IEnumerable <string> > > findFilesFromDb, Func <IServiceProvider, DbContext, TEntity, Task <IEnumerable <string> > > findReferencedFilesFromDb) where TEntity : class { apiBuildContext.ConfigPostApi(x => x.OnCreated(y => y.ConfirmFilesFor(findFilesFromModel))); apiBuildContext.ConfigDeleteApi(x => x.OnKeyGeted(y => y.StageOldFilesFor(findFilesFromDb)).OnDeleted(y => y.DeleteAllStagedFilesFor(findReferencedFilesFromDb))); apiBuildContext.ConfigPutApi(x => x.OnKeySet(y => y.Pipe <TEntity, IServiceProvider>(async(sp, model) => { var keyContext = sp.GetRequiredService <KeyRequestContext <TKey> >(); await StageOldFilesFor(findFilesFromDb, sp, keyContext.Key); return(model); })).OnUpdated(y => y.ConfirmFilesFor(findFilesFromModel).CheckDeleteFileOnUpdateFor(findFilesFromDb, findReferencedFilesFromDb))); return(apiBuildContext); }
public static EntityApiBuildContext <TKey, TEntity> SetupFilePipes <TKey, TEntity, TDbContext>( this EntityApiBuildContext <TKey, TEntity> apiBuildContext, Expression <Func <TEntity, string> > property) where TEntity : class where TDbContext : DbContext { var compiled = property.Compile(); return(apiBuildContext.SetupFilePipes <TKey, TEntity>( (sp, x) => Task.FromResult((new string[] { compiled(x) }).AsEnumerable()), async(sp, db, key) => { var info = sp.GetRequiredService <IModelInfo <TDbContext, TEntity, TKey> >(); var exp = CreateWhereExpression <TKey, TEntity, TDbContext>(info, key); return await db.Set <TEntity>().Where(exp).Select(property).ToArrayAsync(); }, async(sp, db, model) => { var info = sp.GetRequiredService <IModelInfo <TDbContext, TEntity, TKey> >(); var exp = CreateWhereExpression <TKey, TEntity, TDbContext>(info, info.PrimaryKeyAccessor.Getter(model), true); return await db.Set <TEntity>().Where(exp).Select(property).ToArrayAsync(); } )); }
public static EntityApiBuildContext <TKey, TEntity> SetupFilePipes <TKey, TEntity>( this EntityApiBuildContext <TKey, TEntity> apiBuildContext, Func <TEntity, Task <IEnumerable <string> > > findFilesFromModel, Func <DbContext, TKey, Task <IEnumerable <string> > > findFilesFromDb, Func <DbContext, TEntity, Task <IEnumerable <string> > > findReferencedFilesFromDb) where TEntity : class => apiBuildContext.SetupFilePipes((sp, model) => findFilesFromModel(model), (sp, db, key) => findFilesFromDb(db, key), (sp, db, model) => findReferencedFilesFromDb(db, model));
public static EntityApiBuildContext <TKey, TEntity> SetupFilePipes <TKey, TEntity>(this EntityApiBuildContext <TKey, TEntity> apiBuildContext, Expression <Func <TEntity, string> > property) where TEntity : class => apiBuildContext.SetupFilePipes <TKey, TEntity, PlatformDbContext>(property);