Files
GoMembership/internal/repositories/membership_repository.go
2024-07-08 23:43:55 +02:00

54 lines
1.5 KiB
Go

package repositories
import (
"database/sql"
"time"
"GoMembership/internal/models"
"GoMembership/pkg/errors"
)
type MembershipRepository interface {
CreateMembership(account *models.Membership) (int64, error)
FindMembershipByUserID(userID int64) (*models.Membership, error)
}
type membershipRepository struct {
db *sql.DB
}
func NewMembershipRepository(db *sql.DB) MembershipRepository {
return &membershipRepository{db}
}
func (repo *membershipRepository) CreateMembership(membership *models.Membership) (int64, error) {
query := "INSERT INTO memberships (user_id, model_id, start_date, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
result, err := repo.db.Exec(query, membership.UserID, membership.MonthlyFee, membership.RentalFee, membership.Model, time.Now(), membership.Status)
if err != nil {
return -1, err
}
lastInsertID, err := result.LastInsertId()
if err != nil {
return -1, err
}
return lastInsertID, err
}
func (repo *membershipRepository) FindMembershipByUserID(userID int64) (*models.Membership, error) {
var membership models.Membership
query := "SELECT id, model_id, start_date, end_date, status FROM memberships where user_id = ?"
err := repo.db.QueryRow(query, userID).Scan(&membership.ID, &membership.MonthlyFee, &membership.RentalFee, &membership.Model, &membership.StartDate, &membership.EndDate, &membership.Status)
if err != nil {
if err == sql.ErrNoRows {
return nil, errors.ErrNotFound
}
return nil, err
}
membership.UserID = userID
return &membership, nil
}