Restructured project

- backend moved to backend directory
- added and initialized frontend with vue
- moved infrastructure files to infra directory
This commit is contained in:
2026-04-01 22:27:26 +03:00
parent 48ef7217eb
commit 9d845c8899
96 changed files with 1591 additions and 118 deletions
+63
View File
@@ -0,0 +1,63 @@
package repositories
import (
"FamilyHub/src/domain"
"context"
"database/sql"
"errors"
)
type OTPRepository interface {
Create(ctx context.Context, otp *domain.OTP) error
Get(ctx context.Context, userID int64, code string) (*domain.OTP, error)
}
type OTPSQLRepository struct {
db *sql.DB
}
func NewOTPSQLRepository(db *sql.DB) *OTPSQLRepository {
return &OTPSQLRepository{db: db}
}
func (r *OTPSQLRepository) Create(ctx context.Context, otp *domain.OTP) error {
query := `
INSERT INTO otp (user_id, otp, expired_at)
VALUES ($1, $2, $3)
`
_, err := r.db.ExecContext(ctx, query, otp.UserID, otp.Code, otp.ExpiredAt)
return err
}
func (r *OTPSQLRepository) Get(ctx context.Context, userID int64, code string) (*domain.OTP, error) {
query := `
DELETE FROM otp
WHERE ctid IN (
SELECT ctid
FROM otp
WHERE user_id = $1
AND otp = $2
AND expired_at > NOW()
ORDER BY expired_at
LIMIT 1
)
RETURNING user_id, otp, expired_at
`
var otp domain.OTP
err := r.db.QueryRowContext(ctx, query, userID, code).Scan(
&otp.UserID,
&otp.Code,
&otp.ExpiredAt,
)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
return nil, err
}
return &otp, nil
}