sendou.ink/app/db/models/builds/buildsByUserId.sql
2023-04-23 11:55:00 +03:00

67 lines
1.5 KiB
SQL

with "Top500Weapon" as (
select
"BuildWeapon".*,
min("XRankPlacement"."rank") as "minRank",
max("XRankPlacement"."power") as "maxPower"
from
"BuildWeapon"
left join "SplatoonPlayer" on "SplatoonPlayer"."userId" = @userId
left join "XRankPlacement" on "XRankPlacement"."playerId" = "SplatoonPlayer"."id"
and "XRankPlacement"."weaponSplId" = "BuildWeapon"."weaponSplId"
group by
"BuildWeapon"."buildId",
"BuildWeapon"."weaponSplId"
),
"BuildWithWeapon" as (
select
"id",
"title",
"description",
"modes",
"headGearSplId",
"clothesGearSplId",
"shoesGearSplId",
"updatedAt",
"private",
json_group_array(
json_object(
'weaponSplId',
"Top500Weapon"."weaponSplId",
'maxPower',
"Top500Weapon"."maxPower",
'minRank',
"Top500Weapon"."minRank"
)
) as "weapons"
from
"Build"
left join "Top500Weapon" on "Top500Weapon"."buildId" = "Build"."id"
where
"Build"."ownerId" = @userId
and (
"Build"."private" = 0
or "Build"."ownerId" = @loggedInUserId
)
group by
"Build"."id"
)
select
"BuildWithWeapon".*,
json_group_array(
json_object(
'ability',
"BuildAbility"."ability",
'gearType',
"BuildAbility"."gearType",
'slotIndex',
"BuildAbility"."slotIndex"
)
) as "abilities"
from
"BuildWithWeapon"
left join "BuildAbility" on "BuildAbility"."buildId" = "BuildWithWeapon"."id"
group by
"BuildWithWeapon"."id"
order by
"BuildWithWeapon"."updatedAt" desc