Skip to content

Instantly share code, notes, and snippets.

@mr5z

mr5z/GetCaves.cs

Created Jan 21, 2021
Embed
What would you like to do?
get caves
// GET: api/Cave
[HttpGet]
public async Task<ActionResult<IEnumerable<CaveDto>>> GetCave([FromQuery]Pager pager)
{
var caveQuery =
from cave in context.Cave
join user in context.User on cave.AuthorId equals user.Id
join map in context.Map on cave.Id equals map.CaveId
let score =
(
from score in context.Score
where score.CaveId == cave.Id && score.UserId == user.Id
select score.MaxScore
).Sum()
let paths =
(
from path in context.Path
where path.MapId == map.Id
select new PathDto
{
Color = path.Color,
Points =
(
from point in context.Point
where point.PathId == path.Id
select new PointDto
{
X = point.X,
Y = point.Y,
Dx = point.Dx,
Dy = point.Dy
}
).ToList()
}
)
select new CaveDto
{
Id = cave.Id,
Name = cave.Name,
DateCreated = cave.DateCreated,
DeviceOrigin = cave.DeviceOrigin,
Duration = cave.Duration,
EndPointRadius = cave.EndPointRadius,
ShowJumpScare = cave.ShowJumpScare,
Score = score,
Author = new UserDto
{
DisplayName = user.DisplayName,
Type = user.Type
},
Map = new MapDto
{
Color = map.Color,
OriginalWidth = map.OriginalWidth,
OriginalHeight = map.OriginalHeight
},
Paths = paths.ToList()
};
var result = caveQuery
.Skip(pager.Count * (pager.Page - 1))
.Take(pager.Count);
return await result.ToListAsync();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment