54 lines
1.5 KiB
Go
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
|
|
|
|
}
|