Moved infra from internal/ to src/ dir
This commit is contained in:
101
src/infra/repository/url_access_repository.go
Normal file
101
src/infra/repository/url_access_repository.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity"
|
||||
"git.ego.freeddns.org/egommerce/go-api-pkg/database"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
type URLAccessRepository struct {
|
||||
db *pgxpool.Pool
|
||||
}
|
||||
|
||||
func NewURLAccessRepository(db *pgxpool.Pool) *URLAccessRepository {
|
||||
return &URLAccessRepository{db}
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindByID(id string) (*entity.URLAccess, error) {
|
||||
var urlAccess entity.URLAccess
|
||||
|
||||
sql := `SELECT id, roles, url, service FROM identity.url_access WHERE id=$1 LIMIT 1`
|
||||
err := r.db.QueryRow(context.Background(), sql, id).
|
||||
Scan(&urlAccess.ID, &urlAccess.Roles, &urlAccess.URL, &urlAccess.Service)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to fetch url_access from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &urlAccess, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindAll() ([]entity.URLAccess, error) {
|
||||
sql := "SELECT id, roles, url, service FROM identity.url_access ORDER BY service"
|
||||
rows, err := r.db.Query(context.Background(), sql)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var results []entity.URLAccess
|
||||
for rows.Next() {
|
||||
var url entity.URLAccess
|
||||
if err := rows.Scan(&url.ID, &url.Roles, &url.URL, &url.Service); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, url)
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) Create(role *entity.URLAccess) (string, error) {
|
||||
var id string
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) Update(role *entity.URLAccess) (entity.URLAccess, error) {
|
||||
return entity.URLAccess{}, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) Delete(id int64) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindByURLAndService(url, service string) (*entity.URLAccess, error) {
|
||||
var urlAccess entity.URLAccess
|
||||
|
||||
sql := `SELECT id, roles, url FROM identity.url_access WHERE url=$1 AND service=$2 LIMIT 1`
|
||||
err := r.db.QueryRow(context.Background(), sql, url, service).
|
||||
Scan(&urlAccess.ID, &urlAccess.Roles, &urlAccess.URL)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to fetch url_access from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &urlAccess, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindByURLAndServiceForRole(url, service, role string) (*entity.URLAccess, error) {
|
||||
var entity entity.URLAccess
|
||||
|
||||
sql := fmt.Sprintf("SELECT id, roles, url, service FROM identity.url_access WHERE url=$1 AND service=$2 AND roles::jsonb @> '[\"%s\"]'::jsonb LIMIT 1", role)
|
||||
err := r.db.QueryRow(context.Background(), sql, url, service).
|
||||
Scan(&entity.ID, &entity.Roles, &entity.URL, &entity.Service)
|
||||
if err != nil {
|
||||
if err = database.NoRowsInQuerySet(err); err != nil {
|
||||
return nil, errors.New("no url found for: " + url + " and role: " + role)
|
||||
}
|
||||
|
||||
return nil, errors.New("failed to fetch url_access from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &entity, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindForUser(user *entity.User) {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user