Return more data per player on listing all players
This commit is contained in:
		@@ -40,6 +40,9 @@ var as AssociationService
 | 
			
		||||
//go:embed selectPlayer.sql
 | 
			
		||||
var selectPlayer string
 | 
			
		||||
 | 
			
		||||
//go:embed selectPlayers.sql	
 | 
			
		||||
var selectPlayers string
 | 
			
		||||
 | 
			
		||||
//go:embed selectAssociation.sql
 | 
			
		||||
var selectAssociation string
 | 
			
		||||
 | 
			
		||||
@@ -122,7 +125,7 @@ func GetPlayer(c fiber.Ctx) error {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetPlayers(c fiber.Ctx) error {
 | 
			
		||||
	players, err := ps.Query(PlayerServiceQuery{})
 | 
			
		||||
	players, err := ps.GetAllPlayers()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Error.Printf("Failed getting players: %v", err)
 | 
			
		||||
		return c.Status(500).JSON(Response{
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ func (ps *PlayerService) Query(query PlayerServiceQuery) ([]Player, error) {
 | 
			
		||||
 | 
			
		||||
	for rows.Next() {
 | 
			
		||||
		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 {
 | 
			
		||||
			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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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"`
 | 
			
		||||
	}
 | 
			
		||||
	Player struct {
 | 
			
		||||
		ID    int64  `json:"id"`
 | 
			
		||||
		Name  string `json:"name"`
 | 
			
		||||
		Guild Guild  `json:"guild,omitempty"`
 | 
			
		||||
		ID           int64  `json:"id"`
 | 
			
		||||
		Name         string `json:"name"`
 | 
			
		||||
		Guild        Guild  `json:"guild,omitempty"`
 | 
			
		||||
		Notes        int    `json:"notes"`
 | 
			
		||||
		Associations int    `json:"associations"`
 | 
			
		||||
	}
 | 
			
		||||
	Association struct {
 | 
			
		||||
		ID   int64  `json:"id"`
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,15 @@
 | 
			
		||||
export type Player = {
 | 
			
		||||
	id: number;
 | 
			
		||||
	name: string;
 | 
			
		||||
	guild: {
 | 
			
		||||
		id: number;
 | 
			
		||||
		name: string;
 | 
			
		||||
	};
 | 
			
		||||
	associations: number;
 | 
			
		||||
	notes: number;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export type PlayerFull = {
 | 
			
		||||
	id: number;
 | 
			
		||||
	name: string;
 | 
			
		||||
	guild: {
 | 
			
		||||
@@ -26,4 +37,4 @@ export type APIResponse<T> = {
 | 
			
		||||
	success: boolean;
 | 
			
		||||
	message: string;
 | 
			
		||||
	data: T;
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user