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 }