initial commit
This commit is contained in:
73
internal/repository/auth_repository.go
Normal file
73
internal/repository/auth_repository.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.kirlllll.ru/volontery/backend/internal/database"
|
||||
)
|
||||
|
||||
// AuthRepository предоставляет методы для работы с аутентификацией
|
||||
type AuthRepository struct {
|
||||
queries *database.Queries
|
||||
}
|
||||
|
||||
// NewAuthRepository создает новый AuthRepository
|
||||
func NewAuthRepository(queries *database.Queries) *AuthRepository {
|
||||
return &AuthRepository{queries: queries}
|
||||
}
|
||||
|
||||
// CreateRefreshToken создает новый refresh токен
|
||||
func (r *AuthRepository) CreateRefreshToken(ctx context.Context, params database.CreateRefreshTokenParams) (*database.RefreshToken, error) {
|
||||
result, err := r.queries.CreateRefreshToken(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetRefreshToken получает refresh токен
|
||||
func (r *AuthRepository) GetRefreshToken(ctx context.Context, token string) (*database.RefreshToken, error) {
|
||||
result, err := r.queries.GetRefreshToken(ctx, token)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// RevokeRefreshToken отзывает refresh токен
|
||||
func (r *AuthRepository) RevokeRefreshToken(ctx context.Context, id int64) error {
|
||||
return r.queries.RevokeRefreshToken(ctx, id)
|
||||
}
|
||||
|
||||
// RevokeAllUserTokens отзывает все токены пользователя
|
||||
func (r *AuthRepository) RevokeAllUserTokens(ctx context.Context, userID int64) error {
|
||||
return r.queries.RevokeAllUserTokens(ctx, userID)
|
||||
}
|
||||
|
||||
// CreateUserSession создает новую сессию
|
||||
func (r *AuthRepository) CreateUserSession(ctx context.Context, params database.CreateUserSessionParams) (*database.UserSession, error) {
|
||||
result, err := r.queries.CreateUserSession(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetUserSession получает сессию по токену
|
||||
func (r *AuthRepository) GetUserSession(ctx context.Context, sessionToken string) (*database.UserSession, error) {
|
||||
result, err := r.queries.GetUserSession(ctx, sessionToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// UpdateSessionActivity обновляет время активности сессии
|
||||
func (r *AuthRepository) UpdateSessionActivity(ctx context.Context, id int64) error {
|
||||
return r.queries.UpdateSessionActivity(ctx, id)
|
||||
}
|
||||
|
||||
// InvalidateUserSession удаляет сессию
|
||||
func (r *AuthRepository) InvalidateUserSession(ctx context.Context, id int64) error {
|
||||
return r.queries.InvalidateUserSession(ctx, id)
|
||||
}
|
||||
60
internal/repository/rbac_repository.go
Normal file
60
internal/repository/rbac_repository.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.kirlllll.ru/volontery/backend/internal/database"
|
||||
)
|
||||
|
||||
// RBACRepository предоставляет методы для работы с RBAC
|
||||
type RBACRepository struct {
|
||||
queries *database.Queries
|
||||
}
|
||||
|
||||
// NewRBACRepository создает новый RBACRepository
|
||||
func NewRBACRepository(queries *database.Queries) *RBACRepository {
|
||||
return &RBACRepository{queries: queries}
|
||||
}
|
||||
|
||||
// GetUserRoles получает роли пользователя
|
||||
func (r *RBACRepository) GetUserRoles(ctx context.Context, userID int64) ([]database.Role, error) {
|
||||
return r.queries.GetUserRoles(ctx, userID)
|
||||
}
|
||||
|
||||
// AssignRoleToUser назначает роль пользователю
|
||||
func (r *RBACRepository) AssignRoleToUser(ctx context.Context, params database.AssignRoleToUserParams) (*database.UserRole, error) {
|
||||
result, err := r.queries.AssignRoleToUser(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetRoleByName получает роль по имени
|
||||
func (r *RBACRepository) GetRoleByName(ctx context.Context, name string) (*database.Role, error) {
|
||||
result, err := r.queries.GetRoleByName(ctx, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// UserHasRole проверяет наличие роли у пользователя
|
||||
func (r *RBACRepository) UserHasRole(ctx context.Context, params database.UserHasRoleParams) (bool, error) {
|
||||
return r.queries.UserHasRole(ctx, params)
|
||||
}
|
||||
|
||||
// UserHasRoleByName проверяет наличие роли по имени
|
||||
func (r *RBACRepository) UserHasRoleByName(ctx context.Context, params database.UserHasRoleByNameParams) (bool, error) {
|
||||
return r.queries.UserHasRoleByName(ctx, params)
|
||||
}
|
||||
|
||||
// GetUserPermissions получает все разрешения пользователя
|
||||
func (r *RBACRepository) GetUserPermissions(ctx context.Context, userID int64) ([]database.GetUserPermissionsRow, error) {
|
||||
return r.queries.GetUserPermissions(ctx, userID)
|
||||
}
|
||||
|
||||
// UserHasPermission проверяет наличие разрешения у пользователя
|
||||
func (r *RBACRepository) UserHasPermission(ctx context.Context, params database.UserHasPermissionParams) (bool, error) {
|
||||
return r.queries.UserHasPermission(ctx, params)
|
||||
}
|
||||
26
internal/repository/repository.go
Normal file
26
internal/repository/repository.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"git.kirlllll.ru/volontery/backend/internal/database"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
// Repository содержит все репозитории приложения
|
||||
type Repository struct {
|
||||
User *UserRepository
|
||||
Auth *AuthRepository
|
||||
Request *RequestRepository
|
||||
RBAC *RBACRepository
|
||||
}
|
||||
|
||||
// New создает новый экземпляр Repository
|
||||
func New(pool *pgxpool.Pool) *Repository {
|
||||
queries := database.New(pool)
|
||||
|
||||
return &Repository{
|
||||
User: NewUserRepository(queries),
|
||||
Auth: NewAuthRepository(queries),
|
||||
Request: NewRequestRepository(queries),
|
||||
RBAC: NewRBACRepository(queries),
|
||||
}
|
||||
}
|
||||
165
internal/repository/request_repository.go
Normal file
165
internal/repository/request_repository.go
Normal file
@@ -0,0 +1,165 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.kirlllll.ru/volontery/backend/internal/database"
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
)
|
||||
|
||||
// RequestRepository предоставляет методы для работы с заявками
|
||||
type RequestRepository struct {
|
||||
queries *database.Queries
|
||||
}
|
||||
|
||||
// NewRequestRepository создает новый RequestRepository
|
||||
func NewRequestRepository(queries *database.Queries) *RequestRepository {
|
||||
return &RequestRepository{queries: queries}
|
||||
}
|
||||
|
||||
// Create создает новую заявку
|
||||
func (r *RequestRepository) Create(ctx context.Context, params database.CreateRequestParams) (*database.CreateRequestRow, error) {
|
||||
result, err := r.queries.CreateRequest(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetByID получает заявку по ID
|
||||
func (r *RequestRepository) GetByID(ctx context.Context, id int64) (*database.GetRequestByIDRow, error) {
|
||||
result, err := r.queries.GetRequestByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetByRequester получает заявки пользователя
|
||||
func (r *RequestRepository) GetByRequester(ctx context.Context, params database.GetRequestsByRequesterParams) ([]database.GetRequestsByRequesterRow, error) {
|
||||
return r.queries.GetRequestsByRequester(ctx, params)
|
||||
}
|
||||
|
||||
// UpdateStatus обновляет статус заявки
|
||||
func (r *RequestRepository) UpdateStatus(ctx context.Context, params database.UpdateRequestStatusParams) error {
|
||||
return r.queries.UpdateRequestStatus(ctx, params)
|
||||
}
|
||||
|
||||
// Delete удаляет заявку (soft delete)
|
||||
func (r *RequestRepository) Delete(ctx context.Context, params database.DeleteRequestParams) error {
|
||||
return r.queries.DeleteRequest(ctx, params)
|
||||
}
|
||||
|
||||
// ListTypes получает список типов заявок
|
||||
func (r *RequestRepository) ListTypes(ctx context.Context) ([]database.RequestType, error) {
|
||||
return r.queries.ListRequestTypes(ctx)
|
||||
}
|
||||
|
||||
// FindNearby ищет заявки рядом с точкой
|
||||
func (r *RequestRepository) FindNearby(ctx context.Context, params database.FindRequestsNearbyParams) ([]database.FindRequestsNearbyRow, error) {
|
||||
return r.queries.FindRequestsNearby(ctx, params)
|
||||
}
|
||||
|
||||
// FindInBounds ищет заявки в прямоугольной области
|
||||
func (r *RequestRepository) FindInBounds(ctx context.Context, params database.FindRequestsInBoundsParams) ([]database.FindRequestsInBoundsRow, error) {
|
||||
return r.queries.FindRequestsInBounds(ctx, params)
|
||||
}
|
||||
|
||||
// CreateVolunteerResponse создает отклик волонтера
|
||||
func (r *RequestRepository) CreateVolunteerResponse(ctx context.Context, params database.CreateVolunteerResponseParams) (*database.VolunteerResponse, error) {
|
||||
result, err := r.queries.CreateVolunteerResponse(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetResponsesByRequest получает отклики на заявку
|
||||
func (r *RequestRepository) GetResponsesByRequest(ctx context.Context, requestID int64) ([]database.GetResponsesByRequestRow, error) {
|
||||
return r.queries.GetResponsesByRequest(ctx, requestID)
|
||||
}
|
||||
|
||||
// GetPendingModerationRequests получает заявки на модерации
|
||||
func (r *RequestRepository) GetPendingModerationRequests(ctx context.Context, limit, offset int32) ([]database.GetPendingModerationRequestsRow, error) {
|
||||
return r.queries.GetPendingModerationRequests(ctx, database.GetPendingModerationRequestsParams{
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
}
|
||||
|
||||
// ApproveRequest одобряет заявку
|
||||
func (r *RequestRepository) ApproveRequest(ctx context.Context, params database.ApproveRequestParams) error {
|
||||
return r.queries.ApproveRequest(ctx, params)
|
||||
}
|
||||
|
||||
// int64ToPgInt8 конвертирует int64 в pgtype.Int8
|
||||
func int64ToPgInt8(i int64) pgtype.Int8 {
|
||||
if i == 0 {
|
||||
return pgtype.Int8{Valid: false}
|
||||
}
|
||||
return pgtype.Int8{Int64: i, Valid: true}
|
||||
}
|
||||
|
||||
// RejectRequest отклоняет заявку
|
||||
func (r *RequestRepository) RejectRequest(ctx context.Context, params database.RejectRequestParams) error {
|
||||
return r.queries.RejectRequest(ctx, params)
|
||||
}
|
||||
|
||||
// GetModeratedRequests получает заявки, модерированные указанным модератором
|
||||
func (r *RequestRepository) GetModeratedRequests(ctx context.Context, moderatorID int64, limit, offset int32) ([]database.GetModeratedRequestsRow, error) {
|
||||
return r.queries.GetModeratedRequests(ctx, database.GetModeratedRequestsParams{
|
||||
ModeratedBy: int64ToPgInt8(moderatorID),
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
})
|
||||
}
|
||||
|
||||
// AcceptVolunteerResponse вызывает хранимую процедуру для принятия отклика
|
||||
func (r *RequestRepository) AcceptVolunteerResponse(ctx context.Context, responseID, requesterID int64) (*database.CallAcceptVolunteerResponseRow, error) {
|
||||
result, err := r.queries.CallAcceptVolunteerResponse(ctx, database.CallAcceptVolunteerResponseParams{
|
||||
PResponseID: responseID,
|
||||
PRequesterID: requesterID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// CompleteRequestWithRating вызывает хранимую процедуру для завершения заявки с рейтингом
|
||||
func (r *RequestRepository) CompleteRequestWithRating(ctx context.Context, requestID, requesterID int64, rating int32, comment *string) (*database.CallCompleteRequestWithRatingRow, error) {
|
||||
params := database.CallCompleteRequestWithRatingParams{
|
||||
PRequestID: requestID,
|
||||
PRequesterID: requesterID,
|
||||
PRating: rating,
|
||||
}
|
||||
|
||||
if comment != nil {
|
||||
params.Comment = pgtype.Text{String: *comment, Valid: true}
|
||||
}
|
||||
|
||||
result, err := r.queries.CallCompleteRequestWithRating(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// ModerateRequestProcedure вызывает хранимую процедуру для модерации заявки
|
||||
func (r *RequestRepository) ModerateRequestProcedure(ctx context.Context, requestID, moderatorID int64, action string, comment *string) (*database.CallModerateRequestRow, error) {
|
||||
params := database.CallModerateRequestParams{
|
||||
PRequestID: requestID,
|
||||
PModeratorID: moderatorID,
|
||||
PAction: action,
|
||||
}
|
||||
|
||||
if comment != nil {
|
||||
params.Comment = pgtype.Text{String: *comment, Valid: true}
|
||||
}
|
||||
|
||||
result, err := r.queries.CallModerateRequest(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
78
internal/repository/user_repository.go
Normal file
78
internal/repository/user_repository.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.kirlllll.ru/volontery/backend/internal/database"
|
||||
)
|
||||
|
||||
// UserRepository предоставляет методы для работы с пользователями
|
||||
type UserRepository struct {
|
||||
queries *database.Queries
|
||||
}
|
||||
|
||||
// NewUserRepository создает новый UserRepository
|
||||
func NewUserRepository(queries *database.Queries) *UserRepository {
|
||||
return &UserRepository{queries: queries}
|
||||
}
|
||||
|
||||
// GetByID получает пользователя по ID
|
||||
func (r *UserRepository) GetByID(ctx context.Context, id int64) (*database.GetUserByIDRow, error) {
|
||||
result, err := r.queries.GetUserByID(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// GetByEmail получает пользователя по email
|
||||
func (r *UserRepository) GetByEmail(ctx context.Context, email string) (*database.GetUserByEmailRow, error) {
|
||||
result, err := r.queries.GetUserByEmail(ctx, email)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// Create создает нового пользователя
|
||||
func (r *UserRepository) Create(ctx context.Context, params database.CreateUserParams) (*database.CreateUserRow, error) {
|
||||
result, err := r.queries.CreateUser(ctx, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// EmailExists проверяет существование email
|
||||
func (r *UserRepository) EmailExists(ctx context.Context, email string) (bool, error) {
|
||||
return r.queries.EmailExists(ctx, email)
|
||||
}
|
||||
|
||||
// UpdateLastLogin обновляет время последнего входа
|
||||
func (r *UserRepository) UpdateLastLogin(ctx context.Context, id int64) error {
|
||||
return r.queries.UpdateLastLogin(ctx, id)
|
||||
}
|
||||
|
||||
// GetProfile получает профиль пользователя
|
||||
func (r *UserRepository) GetProfile(ctx context.Context, id int64) (*database.GetUserProfileRow, error) {
|
||||
result, err := r.queries.GetUserProfile(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// UpdateProfile обновляет профиль пользователя
|
||||
func (r *UserRepository) UpdateProfile(ctx context.Context, params database.UpdateUserProfileParams) error {
|
||||
return r.queries.UpdateUserProfile(ctx, params)
|
||||
}
|
||||
|
||||
// UpdateLocation обновляет геолокацию пользователя
|
||||
func (r *UserRepository) UpdateLocation(ctx context.Context, params database.UpdateUserLocationParams) error {
|
||||
return r.queries.UpdateUserLocation(ctx, params)
|
||||
}
|
||||
|
||||
// VerifyEmail подтверждает email пользователя
|
||||
func (r *UserRepository) VerifyEmail(ctx context.Context, id int64) error {
|
||||
return r.queries.VerifyUserEmail(ctx, id)
|
||||
}
|
||||
Reference in New Issue
Block a user