feat(backend/repositories): add get tags by file method
refactor(backend/domain): start switching from pgx types
This commit is contained in:
@@ -270,3 +270,44 @@ func (s *FileRepository) Delete(ctx context.Context, user_id int, file_id string
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *FileRepository) GetTags(ctx context.Context, user_id int, file_id string) (tags []domain.TagItem, domainErr *domain.DomainError) {
|
||||
rows, err := s.db.Query(ctx, `
|
||||
SELECT
|
||||
t.id,
|
||||
t.name,
|
||||
t.color,
|
||||
c.id,
|
||||
c.name,
|
||||
c.color
|
||||
FROM data.tags t
|
||||
LEFT JOIN data.categories c ON c.id=t.category_id
|
||||
JOIN data.file_tag ft ON ft.tag_id=t.id AND ft.file_id=$2
|
||||
JOIN data.files f ON f.id=$2
|
||||
WHERE NOT f.is_deleted AND (f.creator_id=$1 OR (SELECT view FROM acl.files WHERE file_id=$2 AND user_id=$1) OR (SELECT is_admin FROM system.users WHERE id=$1))
|
||||
`, user_id, file_id)
|
||||
if err != nil {
|
||||
var pgErr *pgconn.PgError
|
||||
if errors.As(err, &pgErr) && (pgErr.Code == "22P02" || pgErr.Code == "22007") {
|
||||
domainErr = domain.NewDomainError(err, domain.ErrValidation, "format", pgErr.Message)
|
||||
return
|
||||
}
|
||||
domainErr = domain.NewUnexpectedError(err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var tag domain.TagItem
|
||||
err = rows.Scan(&tag.ID, &tag.Name, &tag.Color, &tag.Category.ID, &tag.Category.Name, &tag.Category.Color)
|
||||
if err != nil {
|
||||
domainErr = domain.NewUnexpectedError(err)
|
||||
return
|
||||
}
|
||||
tags = append(tags, tag)
|
||||
}
|
||||
err = rows.Err()
|
||||
if err != nil {
|
||||
domainErr = domain.NewUnexpectedError(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user