package storage import "context" // CreateMedia регистрирует уже сохранённый на диск файл. width/height могут быть // nil, если размер картинки определить не удалось. func (s *Storage) CreateMedia(ctx context.Context, path, mime string, size int64, width, height *int, alt string) (int64, error) { var id int64 err := s.pool.QueryRow(ctx, ` INSERT INTO media (path, mime, size, width, height, alt) VALUES ($1,$2,$3,$4,$5,$6) RETURNING id`, path, mime, size, width, height, alt).Scan(&id) return id, err } // CreateSiteReview кладёт отзыв, оставленный на сайте, в очередь модерации. // На сайте он появится только после публикации в админке. func (s *Storage) CreateSiteReview(ctx context.Context, author, text string, rating *int, doctorID *int64) error { _, err := s.pool.Exec(ctx, ` INSERT INTO reviews (author_name, rating, text, doctor_id, source, status) VALUES ($1, $2, $3, $4, 'site', 'pending')`, author, rating, text, doctorID) return err } // MediaMime отдаёт тип файла из медиатеки: админка проверяет, что в поле картинки не попал PDF. func (s *Storage) MediaMime(ctx context.Context, id int64) (string, error) { var mime string err := s.pool.QueryRow(ctx, `SELECT mime FROM media WHERE id=$1`, id).Scan(&mime) return mime, wrapNotFound(err) }