Compare commits
2 Commits
460503ba4a
...
114eaddc94
Author | SHA1 | Date | |
---|---|---|---|
114eaddc94 | |||
385b22d4e4 |
@@ -40,6 +40,9 @@ var as AssociationService
|
|||||||
//go:embed selectPlayer.sql
|
//go:embed selectPlayer.sql
|
||||||
var selectPlayer string
|
var selectPlayer string
|
||||||
|
|
||||||
|
//go:embed selectPlayers.sql
|
||||||
|
var selectPlayers string
|
||||||
|
|
||||||
//go:embed selectAssociation.sql
|
//go:embed selectAssociation.sql
|
||||||
var selectAssociation string
|
var selectAssociation string
|
||||||
|
|
||||||
@@ -122,7 +125,7 @@ func GetPlayer(c fiber.Ctx) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetPlayers(c fiber.Ctx) error {
|
func GetPlayers(c fiber.Ctx) error {
|
||||||
players, err := ps.Query(PlayerServiceQuery{})
|
players, err := ps.GetAllPlayers()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Error.Printf("Failed getting players: %v", err)
|
Error.Printf("Failed getting players: %v", err)
|
||||||
return c.Status(500).JSON(Response{
|
return c.Status(500).JSON(Response{
|
||||||
|
@@ -29,7 +29,7 @@ func (ps *PlayerService) Query(query PlayerServiceQuery) ([]Player, error) {
|
|||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
player := Player{}
|
player := Player{}
|
||||||
err := rows.Scan(&player.ID, &player.Name, &player.Guild.ID)
|
err := rows.Scan(&player.ID, &player.Name, &player.Guild.ID, &player.Notes, &player.Associations)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, fmt.Errorf("failed scanning player: %v", err)
|
return res, fmt.Errorf("failed scanning player: %v", err)
|
||||||
}
|
}
|
||||||
@@ -147,3 +147,24 @@ func (ps *PlayerService) GetAllPlayerInfo(name string, nnotes int) (FullPlayer,
|
|||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ps *PlayerService) GetAllPlayers() ([]Player, error) {
|
||||||
|
res := []Player{}
|
||||||
|
|
||||||
|
rows, err := ps.db.readConn.Query(selectPlayers)
|
||||||
|
if err != nil {
|
||||||
|
return res, fmt.Errorf("failed getting players: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
player := Player{}
|
||||||
|
err := rows.Scan(&player.ID, &player.Name, &player.Guild.ID, &player.Guild.Name, &player.Notes, &player.Associations)
|
||||||
|
if err != nil {
|
||||||
|
return res, fmt.Errorf("failed scanning player: %v", err)
|
||||||
|
}
|
||||||
|
res = append(res, player)
|
||||||
|
}
|
||||||
|
rows.Close()
|
||||||
|
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
20
backend/selectPlayers.sql
Normal file
20
backend/selectPlayers.sql
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
select
|
||||||
|
p.id,
|
||||||
|
p.name,
|
||||||
|
p.guild,
|
||||||
|
g.name,
|
||||||
|
count(distinct n.player) as nnotes,
|
||||||
|
count(
|
||||||
|
distinct case
|
||||||
|
when a.lhs = p.id
|
||||||
|
or a.rhs = p.id then a.id
|
||||||
|
end
|
||||||
|
) as nassoc
|
||||||
|
from
|
||||||
|
player p
|
||||||
|
left join note n on n.player = p.id
|
||||||
|
left join association a on a.lhs = p.id
|
||||||
|
or a.rhs = p.id
|
||||||
|
join guild g on p.guild = g.id
|
||||||
|
group by
|
||||||
|
p.id
|
@@ -8,9 +8,11 @@ type (
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
Player struct {
|
Player struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Guild Guild `json:"guild,omitempty"`
|
Guild Guild `json:"guild,omitempty"`
|
||||||
|
Notes int `json:"notes"`
|
||||||
|
Associations int `json:"associations"`
|
||||||
}
|
}
|
||||||
Association struct {
|
Association struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
import { defineConfig } from 'astro/config';
|
import { defineConfig } from 'astro/config';
|
||||||
|
|
||||||
|
import tailwind from "@astrojs/tailwind";
|
||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
output: "server",
|
output: "server",
|
||||||
});
|
integrations: [tailwind()],
|
||||||
|
});
|
@@ -11,6 +11,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.9.4",
|
"@astrojs/check": "^0.9.4",
|
||||||
|
"@astrojs/tailwind": "^5.1.2",
|
||||||
"astro": "^4.16.7",
|
"astro": "^4.16.7",
|
||||||
"typescript": "^5.6.3"
|
"typescript": "^5.6.3"
|
||||||
},
|
},
|
||||||
|
19
frontend/pnpm-lock.yaml
generated
19
frontend/pnpm-lock.yaml
generated
@@ -11,6 +11,9 @@ importers:
|
|||||||
'@astrojs/check':
|
'@astrojs/check':
|
||||||
specifier: ^0.9.4
|
specifier: ^0.9.4
|
||||||
version: 0.9.4(typescript@5.6.3)
|
version: 0.9.4(typescript@5.6.3)
|
||||||
|
'@astrojs/tailwind':
|
||||||
|
specifier: ^5.1.2
|
||||||
|
version: 5.1.2(astro@4.16.7(rollup@4.24.2)(typescript@5.6.3))(tailwindcss@3.4.14)
|
||||||
astro:
|
astro:
|
||||||
specifier: ^4.16.7
|
specifier: ^4.16.7
|
||||||
version: 4.16.7(rollup@4.24.2)(typescript@5.6.3)
|
version: 4.16.7(rollup@4.24.2)(typescript@5.6.3)
|
||||||
@@ -69,6 +72,12 @@ packages:
|
|||||||
resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
|
resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
|
||||||
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
|
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
|
||||||
|
|
||||||
|
'@astrojs/tailwind@5.1.2':
|
||||||
|
resolution: {integrity: sha512-IvOF0W/dtHElcXvhrPR35nHmhyV3cfz1EzPitMGtU7sYy9Hci3BNK1To6FWmVuuNKPxza1IgCGetSynJZL7fOg==}
|
||||||
|
peerDependencies:
|
||||||
|
astro: ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0
|
||||||
|
tailwindcss: ^3.0.24
|
||||||
|
|
||||||
'@astrojs/telemetry@3.1.0':
|
'@astrojs/telemetry@3.1.0':
|
||||||
resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==}
|
resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==}
|
||||||
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
|
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
|
||||||
@@ -2161,6 +2170,16 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
prismjs: 1.29.0
|
prismjs: 1.29.0
|
||||||
|
|
||||||
|
'@astrojs/tailwind@5.1.2(astro@4.16.7(rollup@4.24.2)(typescript@5.6.3))(tailwindcss@3.4.14)':
|
||||||
|
dependencies:
|
||||||
|
astro: 4.16.7(rollup@4.24.2)(typescript@5.6.3)
|
||||||
|
autoprefixer: 10.4.20(postcss@8.4.47)
|
||||||
|
postcss: 8.4.47
|
||||||
|
postcss-load-config: 4.0.2(postcss@8.4.47)
|
||||||
|
tailwindcss: 3.4.14
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- ts-node
|
||||||
|
|
||||||
'@astrojs/telemetry@3.1.0':
|
'@astrojs/telemetry@3.1.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
ci-info: 4.0.0
|
ci-info: 4.0.0
|
||||||
|
@@ -1,4 +1,15 @@
|
|||||||
export type Player = {
|
export type Player = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
guild: {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
};
|
||||||
|
associations: number;
|
||||||
|
notes: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type PlayerFull = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
guild: {
|
guild: {
|
||||||
@@ -26,4 +37,4 @@ export type APIResponse<T> = {
|
|||||||
success: boolean;
|
success: boolean;
|
||||||
message: string;
|
message: string;
|
||||||
data: T;
|
data: T;
|
||||||
}
|
};
|
||||||
|
Reference in New Issue
Block a user