using Microsoft.AspNetCore.Mvc; namespace zero.Api.Endpoints.Users; public class UsersController : ZeroApiController { readonly IUserService Users; public UsersController(IUserService users) { Users = users; } [HttpGet("empty")] [ZeroAuthorize(UserPermissions.Create)] public virtual ActionResult Empty(string flavor = null) { return new ZeroUser(); } [HttpGet("{id}")] [ZeroAuthorize(UserPermissions.Read)] public virtual async Task> Get(string id) { ZeroUser model = await Users.GetUserById(id); if (model == null) { return NotFound(); } model.PasswordHash = null; model.SecurityStamp = null; //HttpContext.Items[ApiConstants.ChangeToken] = Store.GetChangeToken(model); return model; } [HttpGet("")] [ZeroAuthorize(UserPermissions.Read)] public virtual async Task> Get([FromQuery] ListQuery query) { query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate); query.SearchSelector ??= x => x.Name; Paged result = await Users.GetAll(query.Page, query.PageSize); return Mapper.Map(result); } [HttpPost("")] [ZeroAuthorize(UserPermissions.Create)] public virtual async Task> Create(ZeroUser saveModel) { Result result = await Users.Save(saveModel); bool minimalResponse = Hints.ResponsePreference == ApiResponsePreference.Minimal; if (result.IsSuccess) { return Created("/", minimalResponse ? null : saveModel); } return result.WithoutModel(); } [HttpPut("{id}")] [ZeroAuthorize(UserPermissions.Update)] public virtual async Task> Update(string id, ZeroUser updateModel, [FromQuery] string changeToken = null) { if (id != updateModel.Id) { return BadRequest(Result.Fail(nameof(id), "@errors.onupdate.noidmatch")); } Result result = await Users.Save(updateModel); if (Hints.ResponsePreference == ApiResponsePreference.Minimal) { return result.WithoutModel(); } return result; } [HttpDelete("{id}")] [ZeroAuthorize(UserPermissions.Delete)] public virtual async Task> Delete(string id) { Result result = await Users.Delete(id); return result.WithoutModel(); } [HttpGet("password/random/{length?}")] [ZeroAuthorize(UserPermissions.Read)] public virtual ActionResult Password(int length = -1) { return new { Password = PasswordGenerator.Random(length) }; } }