generated from VLADIMIR/template
113 lines
1.9 KiB
Go
113 lines
1.9 KiB
Go
package applications_repo
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"evening_detective_server/internal/repos"
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
var (
|
|
ErrApplicationNotFound = errors.New("Улика не найдена")
|
|
)
|
|
|
|
type ApplicationsRepo struct {
|
|
pool *pgxpool.Pool
|
|
}
|
|
|
|
func NewApplicationsRepo(pool *pgxpool.Pool) *ApplicationsRepo {
|
|
return &ApplicationsRepo{
|
|
pool: pool,
|
|
}
|
|
}
|
|
|
|
func (r *ApplicationsRepo) AddApplication(
|
|
ctx context.Context,
|
|
teamId int,
|
|
name string,
|
|
image string,
|
|
) (int, error) {
|
|
id := 0
|
|
err := r.pool.QueryRow(
|
|
ctx,
|
|
`INSERT INTO applications (name, image, team_id)
|
|
VALUES ($1, $2, $3)
|
|
RETURNING id`,
|
|
name,
|
|
image,
|
|
teamId,
|
|
).Scan(&id)
|
|
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return id, nil
|
|
}
|
|
|
|
func (r *ApplicationsRepo) GetApplicationsByTeamIDsAndState(
|
|
ctx context.Context,
|
|
teamIds []int,
|
|
state string,
|
|
) (map[int][]*repos.Application, error) {
|
|
rows, err := r.pool.Query(
|
|
ctx,
|
|
`SELECT
|
|
name,
|
|
image,
|
|
team_id
|
|
FROM applications
|
|
WHERE team_id = ANY($1) and status = $2`,
|
|
teamIds,
|
|
state,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
res := make(map[int][]*repos.Application, len(teamIds))
|
|
for rows.Next() {
|
|
application := &repos.Application{}
|
|
err := rows.Scan(
|
|
&application.Name,
|
|
&application.Image,
|
|
&application.TeamId,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res[application.TeamId] = append(res[application.TeamId], application)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (r *ApplicationsRepo) UpdateApplicationStatus(
|
|
ctx context.Context,
|
|
teamId int,
|
|
name string,
|
|
status string,
|
|
) error {
|
|
tag, err := r.pool.Exec(
|
|
ctx,
|
|
`UPDATE applications
|
|
SET
|
|
status = $1
|
|
WHERE team_id = $2 and name = $3`,
|
|
status,
|
|
teamId,
|
|
name,
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if tag.RowsAffected() == 0 {
|
|
return ErrApplicationNotFound
|
|
}
|
|
return nil
|
|
}
|