public async Task <TaskResult <List <PlanetMemberInfo> > > GetPlanetMemberInfo(ulong planet_id, string token) { AuthToken authToken = await Context.AuthTokens.FindAsync(token); // If not a member of planet if (authToken == null || !(await Context.PlanetMembers.AnyAsync(x => x.User_Id == authToken.User_Id && x.Planet_Id == planet_id))) { return(new TaskResult <List <PlanetMemberInfo> >(false, $"Could not authenticate.", null)); } var members = Context.PlanetMembers.AsQueryable() .Where(x => x.Planet_Id == planet_id) .Include(x => x.User) .Include(x => x.RoleMembership .OrderBy(x => x.Role.Position)) .ThenInclude(x => x.Role); List <PlanetMemberInfo> info = new List <PlanetMemberInfo>(); foreach (var member in members) { PlanetMemberInfo planetInfo = new PlanetMemberInfo() { Member = member, User = member.User, RoleIds = member.RoleMembership.Select(x => x.Role_Id).ToList(), State = "Currently browsing" }; info.Add(planetInfo); } return(new TaskResult <List <PlanetMemberInfo> >(true, $"Retrieved {members.Count()} member info objects", info)); }
private static async Task GetMemberInfo(HttpContext ctx, ValourDB db, [FromHeader] string authorization, [Required] ulong planet_id) { ServerAuthToken auth = await ServerAuthToken.TryAuthorize(authorization, db); if (auth == null) { ctx.Response.StatusCode = 401; await ctx.Response.WriteAsync($"Token is invalid [token: {authorization}]"); return; } ServerPlanet planet = await db.Planets .Include(x => x.Members).ThenInclude(x => x.User) .Include(x => x.Members).ThenInclude(x => x.RoleMembership.OrderBy(x => x.Role.Position)) .ThenInclude(x => x.Role) .FirstOrDefaultAsync(x => x.Id == planet_id); if (planet == null) { ctx.Response.StatusCode = 400; await ctx.Response.WriteAsync($"Planet not found [id: {planet_id.ToString()}]"); return; } if (!planet.Members.Any(x => x.User_Id == auth.User_Id)) { ctx.Response.StatusCode = 401; await ctx.Response.WriteAsync($"Member not found"); return; } List <PlanetMemberInfo> info = new List <PlanetMemberInfo>(); foreach (var member in planet.Members) { PlanetMemberInfo planetInfo = new PlanetMemberInfo() { Member = member, User = member.User, RoleIds = member.RoleMembership.Select(x => x.Role_Id), State = "Currently browsing" }; info.Add(planetInfo); } ctx.Response.StatusCode = 200; await ctx.Response.WriteAsJsonAsync(info); }
public void SetCacheValues(PlanetMemberInfo info) { SetCacheValues(info.RoleIds, info.State, info.User); }