dana-medical-site/internal/storage/admin_vacancies.go
2026-10-14 13:33:13 +00:00

91 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package storage
import "context"
type AdminVacancy struct {
ID int64 `json:"id"`
Slug string `json:"slug"`
Title string `json:"title"`
Description string `json:"description"`
Duties string `json:"duties"`
Requirements string `json:"requirements"`
Conditions string `json:"conditions"`
Salary string `json:"salary"`
Sort int `json:"sort"`
Published bool `json:"published"`
}
func (s *Storage) AdminVacancies(ctx context.Context) ([]AdminVacancy, error) {
rows, err := s.pool.Query(ctx, `
SELECT id, slug, title, description, duties, requirements, conditions, salary, sort, published
FROM vacancies
ORDER BY sort, title`)
if err != nil {
return nil, err
}
defer rows.Close()
var out []AdminVacancy
for rows.Next() {
var v AdminVacancy
if err := rows.Scan(&v.ID, &v.Slug, &v.Title, &v.Description, &v.Duties, &v.Requirements,
&v.Conditions, &v.Salary, &v.Sort, &v.Published); err != nil {
return nil, err
}
out = append(out, v)
}
return out, rows.Err()
}
type VacancyInput struct {
Slug string
Title string
Description string
Duties string
Requirements string
Conditions string
Salary string
Sort int
Published bool
}
func (s *Storage) AdminCreateVacancy(ctx context.Context, in VacancyInput) (int64, error) {
var id int64
err := s.pool.QueryRow(ctx, `
INSERT INTO vacancies (slug, title, description, duties, requirements, conditions, salary, sort, published)
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
RETURNING id`,
in.Slug, in.Title, in.Description, in.Duties, in.Requirements, in.Conditions, in.Salary,
in.Sort, in.Published).Scan(&id)
return id, wrapConflict(err)
}
func (s *Storage) AdminUpdateVacancy(ctx context.Context, id int64, in VacancyInput) error {
tag, err := s.pool.Exec(ctx, `
UPDATE vacancies SET slug=$2, title=$3, description=$4, duties=$5, requirements=$6,
conditions=$7, salary=$8, sort=$9, published=$10, updated_at=now()
WHERE id=$1`,
id, in.Slug, in.Title, in.Description, in.Duties, in.Requirements, in.Conditions, in.Salary,
in.Sort, in.Published)
if err != nil {
return wrapConflict(err)
}
if tag.RowsAffected() == 0 {
return ErrNotFound
}
return nil
}
// AdminDeleteVacancy удаляет вакансию насовсем: история по ним не нужна,
// а закрытую на время вакансию достаточно скрыть галочкой.
func (s *Storage) AdminDeleteVacancy(ctx context.Context, id int64) error {
tag, err := s.pool.Exec(ctx, `DELETE FROM vacancies WHERE id=$1`, id)
if err != nil {
return err
}
if tag.RowsAffected() == 0 {
return ErrNotFound
}
return nil
}