414 lines
11 KiB
Go
414 lines
11 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.30.0
|
|
// source: users.sql
|
|
|
|
package database
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
const BlockUser = `-- name: BlockUser :exec
|
|
UPDATE users SET
|
|
is_blocked = TRUE,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1
|
|
`
|
|
|
|
func (q *Queries) BlockUser(ctx context.Context, id int64) error {
|
|
_, err := q.db.Exec(ctx, BlockUser, id)
|
|
return err
|
|
}
|
|
|
|
const GetUserProfile = `-- name: GetUserProfile :one
|
|
|
|
|
|
SELECT
|
|
id,
|
|
email,
|
|
phone,
|
|
first_name,
|
|
last_name,
|
|
avatar_url,
|
|
ST_Y(location::geometry) as latitude,
|
|
ST_X(location::geometry) as longitude,
|
|
address,
|
|
city,
|
|
volunteer_rating,
|
|
completed_requests_count,
|
|
is_verified,
|
|
is_blocked,
|
|
email_verified,
|
|
created_at,
|
|
updated_at,
|
|
last_login_at
|
|
FROM users
|
|
WHERE id = $1 AND deleted_at IS NULL
|
|
`
|
|
|
|
type GetUserProfileRow struct {
|
|
ID int64 `json:"id"`
|
|
Email string `json:"email"`
|
|
Phone pgtype.Text `json:"phone"`
|
|
FirstName string `json:"first_name"`
|
|
LastName string `json:"last_name"`
|
|
AvatarUrl pgtype.Text `json:"avatar_url"`
|
|
Latitude interface{} `json:"latitude"`
|
|
Longitude interface{} `json:"longitude"`
|
|
Address pgtype.Text `json:"address"`
|
|
City pgtype.Text `json:"city"`
|
|
VolunteerRating pgtype.Numeric `json:"volunteer_rating"`
|
|
CompletedRequestsCount pgtype.Int4 `json:"completed_requests_count"`
|
|
IsVerified pgtype.Bool `json:"is_verified"`
|
|
IsBlocked pgtype.Bool `json:"is_blocked"`
|
|
EmailVerified pgtype.Bool `json:"email_verified"`
|
|
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
|
LastLoginAt pgtype.Timestamptz `json:"last_login_at"`
|
|
}
|
|
|
|
// Фаза 1C: Управление профилем (КРИТИЧНО)
|
|
// Запросы для получения и обновления профилей пользователей
|
|
// ============================================================================
|
|
// Профиль пользователя
|
|
// ============================================================================
|
|
func (q *Queries) GetUserProfile(ctx context.Context, id int64) (GetUserProfileRow, error) {
|
|
row := q.db.QueryRow(ctx, GetUserProfile, id)
|
|
var i GetUserProfileRow
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.Email,
|
|
&i.Phone,
|
|
&i.FirstName,
|
|
&i.LastName,
|
|
&i.AvatarUrl,
|
|
&i.Latitude,
|
|
&i.Longitude,
|
|
&i.Address,
|
|
&i.City,
|
|
&i.VolunteerRating,
|
|
&i.CompletedRequestsCount,
|
|
&i.IsVerified,
|
|
&i.IsBlocked,
|
|
&i.EmailVerified,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.LastLoginAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const GetUsersByIDs = `-- name: GetUsersByIDs :many
|
|
|
|
SELECT
|
|
id,
|
|
email,
|
|
phone,
|
|
password_hash,
|
|
first_name,
|
|
last_name,
|
|
avatar_url,
|
|
ST_Y(location::geometry) as latitude,
|
|
ST_X(location::geometry) as longitude,
|
|
address,
|
|
city,
|
|
volunteer_rating,
|
|
completed_requests_count,
|
|
is_verified,
|
|
is_blocked,
|
|
email_verified,
|
|
created_at,
|
|
updated_at,
|
|
last_login_at,
|
|
deleted_at
|
|
FROM users
|
|
WHERE id = ANY($1::bigint[])
|
|
AND deleted_at IS NULL
|
|
`
|
|
|
|
type GetUsersByIDsRow struct {
|
|
ID int64 `json:"id"`
|
|
Email string `json:"email"`
|
|
Phone pgtype.Text `json:"phone"`
|
|
PasswordHash string `json:"password_hash"`
|
|
FirstName string `json:"first_name"`
|
|
LastName string `json:"last_name"`
|
|
AvatarUrl pgtype.Text `json:"avatar_url"`
|
|
Latitude interface{} `json:"latitude"`
|
|
Longitude interface{} `json:"longitude"`
|
|
Address pgtype.Text `json:"address"`
|
|
City pgtype.Text `json:"city"`
|
|
VolunteerRating pgtype.Numeric `json:"volunteer_rating"`
|
|
CompletedRequestsCount pgtype.Int4 `json:"completed_requests_count"`
|
|
IsVerified pgtype.Bool `json:"is_verified"`
|
|
IsBlocked pgtype.Bool `json:"is_blocked"`
|
|
EmailVerified pgtype.Bool `json:"email_verified"`
|
|
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
|
LastLoginAt pgtype.Timestamptz `json:"last_login_at"`
|
|
DeletedAt pgtype.Timestamptz `json:"deleted_at"`
|
|
}
|
|
|
|
// ============================================================================
|
|
// Поиск пользователей
|
|
// ============================================================================
|
|
func (q *Queries) GetUsersByIDs(ctx context.Context, dollar_1 []int64) ([]GetUsersByIDsRow, error) {
|
|
rows, err := q.db.Query(ctx, GetUsersByIDs, dollar_1)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []GetUsersByIDsRow{}
|
|
for rows.Next() {
|
|
var i GetUsersByIDsRow
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.Email,
|
|
&i.Phone,
|
|
&i.PasswordHash,
|
|
&i.FirstName,
|
|
&i.LastName,
|
|
&i.AvatarUrl,
|
|
&i.Latitude,
|
|
&i.Longitude,
|
|
&i.Address,
|
|
&i.City,
|
|
&i.VolunteerRating,
|
|
&i.CompletedRequestsCount,
|
|
&i.IsVerified,
|
|
&i.IsBlocked,
|
|
&i.EmailVerified,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.LastLoginAt,
|
|
&i.DeletedAt,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const GetVolunteerStatistics = `-- name: GetVolunteerStatistics :one
|
|
SELECT
|
|
id,
|
|
first_name,
|
|
last_name,
|
|
volunteer_rating,
|
|
completed_requests_count,
|
|
created_at as member_since
|
|
FROM users
|
|
WHERE id = $1
|
|
AND deleted_at IS NULL
|
|
`
|
|
|
|
type GetVolunteerStatisticsRow struct {
|
|
ID int64 `json:"id"`
|
|
FirstName string `json:"first_name"`
|
|
LastName string `json:"last_name"`
|
|
VolunteerRating pgtype.Numeric `json:"volunteer_rating"`
|
|
CompletedRequestsCount pgtype.Int4 `json:"completed_requests_count"`
|
|
MemberSince pgtype.Timestamptz `json:"member_since"`
|
|
}
|
|
|
|
func (q *Queries) GetVolunteerStatistics(ctx context.Context, id int64) (GetVolunteerStatisticsRow, error) {
|
|
row := q.db.QueryRow(ctx, GetVolunteerStatistics, id)
|
|
var i GetVolunteerStatisticsRow
|
|
err := row.Scan(
|
|
&i.ID,
|
|
&i.FirstName,
|
|
&i.LastName,
|
|
&i.VolunteerRating,
|
|
&i.CompletedRequestsCount,
|
|
&i.MemberSince,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const SearchUsersByName = `-- name: SearchUsersByName :many
|
|
SELECT
|
|
id,
|
|
email,
|
|
first_name,
|
|
last_name,
|
|
avatar_url,
|
|
volunteer_rating,
|
|
completed_requests_count,
|
|
is_verified
|
|
FROM users
|
|
WHERE (first_name ILIKE '%' || $1 || '%' OR last_name ILIKE '%' || $1 || '%' OR (first_name || ' ' || last_name) ILIKE '%' || $1 || '%')
|
|
AND deleted_at IS NULL
|
|
AND is_blocked = FALSE
|
|
ORDER BY volunteer_rating DESC NULLS LAST
|
|
LIMIT $2 OFFSET $3
|
|
`
|
|
|
|
type SearchUsersByNameParams struct {
|
|
Column1 pgtype.Text `json:"column_1"`
|
|
Limit int32 `json:"limit"`
|
|
Offset int32 `json:"offset"`
|
|
}
|
|
|
|
type SearchUsersByNameRow struct {
|
|
ID int64 `json:"id"`
|
|
Email string `json:"email"`
|
|
FirstName string `json:"first_name"`
|
|
LastName string `json:"last_name"`
|
|
AvatarUrl pgtype.Text `json:"avatar_url"`
|
|
VolunteerRating pgtype.Numeric `json:"volunteer_rating"`
|
|
CompletedRequestsCount pgtype.Int4 `json:"completed_requests_count"`
|
|
IsVerified pgtype.Bool `json:"is_verified"`
|
|
}
|
|
|
|
func (q *Queries) SearchUsersByName(ctx context.Context, arg SearchUsersByNameParams) ([]SearchUsersByNameRow, error) {
|
|
rows, err := q.db.Query(ctx, SearchUsersByName, arg.Column1, arg.Limit, arg.Offset)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []SearchUsersByNameRow{}
|
|
for rows.Next() {
|
|
var i SearchUsersByNameRow
|
|
if err := rows.Scan(
|
|
&i.ID,
|
|
&i.Email,
|
|
&i.FirstName,
|
|
&i.LastName,
|
|
&i.AvatarUrl,
|
|
&i.VolunteerRating,
|
|
&i.CompletedRequestsCount,
|
|
&i.IsVerified,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const SoftDeleteUser = `-- name: SoftDeleteUser :exec
|
|
UPDATE users SET
|
|
deleted_at = CURRENT_TIMESTAMP,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1
|
|
`
|
|
|
|
func (q *Queries) SoftDeleteUser(ctx context.Context, id int64) error {
|
|
_, err := q.db.Exec(ctx, SoftDeleteUser, id)
|
|
return err
|
|
}
|
|
|
|
const UnblockUser = `-- name: UnblockUser :exec
|
|
UPDATE users SET
|
|
is_blocked = FALSE,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1
|
|
`
|
|
|
|
func (q *Queries) UnblockUser(ctx context.Context, id int64) error {
|
|
_, err := q.db.Exec(ctx, UnblockUser, id)
|
|
return err
|
|
}
|
|
|
|
const UpdateUserLocation = `-- name: UpdateUserLocation :exec
|
|
UPDATE users SET
|
|
location = ST_SetSRID(ST_MakePoint($2, $3), 4326)::geography,
|
|
address = COALESCE($4, address),
|
|
city = COALESCE($5, city),
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1
|
|
`
|
|
|
|
type UpdateUserLocationParams struct {
|
|
ID int64 `json:"id"`
|
|
StMakepoint interface{} `json:"st_makepoint"`
|
|
StMakepoint_2 interface{} `json:"st_makepoint_2"`
|
|
Address pgtype.Text `json:"address"`
|
|
City pgtype.Text `json:"city"`
|
|
}
|
|
|
|
func (q *Queries) UpdateUserLocation(ctx context.Context, arg UpdateUserLocationParams) error {
|
|
_, err := q.db.Exec(ctx, UpdateUserLocation,
|
|
arg.ID,
|
|
arg.StMakepoint,
|
|
arg.StMakepoint_2,
|
|
arg.Address,
|
|
arg.City,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const UpdateUserPassword = `-- name: UpdateUserPassword :exec
|
|
UPDATE users SET
|
|
password_hash = $2,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1
|
|
`
|
|
|
|
type UpdateUserPasswordParams struct {
|
|
ID int64 `json:"id"`
|
|
PasswordHash string `json:"password_hash"`
|
|
}
|
|
|
|
func (q *Queries) UpdateUserPassword(ctx context.Context, arg UpdateUserPasswordParams) error {
|
|
_, err := q.db.Exec(ctx, UpdateUserPassword, arg.ID, arg.PasswordHash)
|
|
return err
|
|
}
|
|
|
|
const UpdateUserProfile = `-- name: UpdateUserProfile :exec
|
|
UPDATE users SET
|
|
phone = COALESCE($1, phone),
|
|
first_name = COALESCE($2, first_name),
|
|
last_name = COALESCE($3, last_name),
|
|
avatar_url = COALESCE($4, avatar_url),
|
|
address = COALESCE($5, address),
|
|
city = COALESCE($6, city),
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $7
|
|
`
|
|
|
|
type UpdateUserProfileParams struct {
|
|
Phone pgtype.Text `json:"phone"`
|
|
FirstName pgtype.Text `json:"first_name"`
|
|
LastName pgtype.Text `json:"last_name"`
|
|
AvatarUrl pgtype.Text `json:"avatar_url"`
|
|
Address pgtype.Text `json:"address"`
|
|
City pgtype.Text `json:"city"`
|
|
UserID int64 `json:"user_id"`
|
|
}
|
|
|
|
func (q *Queries) UpdateUserProfile(ctx context.Context, arg UpdateUserProfileParams) error {
|
|
_, err := q.db.Exec(ctx, UpdateUserProfile,
|
|
arg.Phone,
|
|
arg.FirstName,
|
|
arg.LastName,
|
|
arg.AvatarUrl,
|
|
arg.Address,
|
|
arg.City,
|
|
arg.UserID,
|
|
)
|
|
return err
|
|
}
|
|
|
|
const VerifyUserEmail = `-- name: VerifyUserEmail :exec
|
|
UPDATE users SET
|
|
email_verified = TRUE,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = $1
|
|
`
|
|
|
|
func (q *Queries) VerifyUserEmail(ctx context.Context, id int64) error {
|
|
_, err := q.db.Exec(ctx, VerifyUserEmail, id)
|
|
return err
|
|
}
|