Files
base/internal/repository/postgres/profile/role_mock.go
2026-04-10 18:25:21 +03:30

135 lines
5.6 KiB
Go

package profile
import (
"context"
"sync"
"github.com/google/uuid"
domainProfile "base/internal/domain/profile"
)
// mockRoleData holds the mocked profile roles (matches seed data).
var mockRoleData = []*domainProfile.Role{
{ID: uuid.MustParse("0199b964-5dc0-7657-9178-2a844e23e5b5"), Title: "Data Scientist"},
{ID: uuid.MustParse("0199b964-5dc0-7a1a-94c7-d68daf420e50"), Title: "Machine Learning Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-7759-8221-71f57f5b2b57"), Title: "AI Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-7b79-a268-331f39c35366"), Title: "Data Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-7062-b219-11733a1ab94b"), Title: "Data Analyst"},
{ID: uuid.MustParse("0199b964-5dc0-7434-b105-f2ff49573fe2"), Title: "Business Intelligence Developer"},
{ID: uuid.MustParse("0199b964-5dc0-77f8-be02-f76937f60ba6"), Title: "MLOps Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-7107-907c-6c013cbc08b9"), Title: "AI Product Manager"},
{ID: uuid.MustParse("0199b964-5dc0-72f9-8e0f-dfa2950a8182"), Title: "AI Research Scientist"},
{ID: uuid.MustParse("0199b964-5dc0-7177-829b-f3d05081201e"), Title: "Computer Vision Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-74b7-b427-a500ddb9f435"), Title: "NLP Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-780d-876f-a7b4d15b0ef5"), Title: "Data Architect"},
{ID: uuid.MustParse("0199b964-5dc0-7d3f-af44-19dc33f50b21"), Title: "Big Data Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-7600-9a16-74f17be7ce4b"), Title: "Cloud AI/ML Specialist"},
{ID: uuid.MustParse("0199b964-5dc0-73c2-b9a0-78347ae945d7"), Title: "Generative AI Specialist"},
{ID: uuid.MustParse("0199b964-5dc0-70a8-b710-1f424a776083"), Title: "AI Ethics Officer"},
{ID: uuid.MustParse("0199b964-5dc0-7c87-91c0-348e6f8b43d6"), Title: "AI Governance Manager"},
{ID: uuid.MustParse("0199b964-5dc0-7441-b306-bc2e3d4e4152"), Title: "Data Privacy Engineer"},
{ID: uuid.MustParse("0199b964-5dc0-747f-97b4-c4d98a257dee"), Title: "AI Solutions Architect"},
{ID: uuid.MustParse("0199b964-5dc0-7fa5-8fe0-9eb7831554ed"), Title: "Chief Data & AI Officer"},
{ID: uuid.MustParse("0199b964-5dc0-7447-8785-f246ff9ec309"), Title: "AI Developer Advocate"},
{ID: uuid.MustParse("0199b964-5dc0-7b24-9b1b-c7ca8f08527f"), Title: "AI/ML Educator & Trainer"},
{ID: uuid.MustParse("0199b964-5dc0-756f-ab44-48169ecfbb5e"), Title: "Technical Content Creator (AI/ML)"},
{ID: uuid.MustParse("0199b964-5dc0-79d1-9086-c809d8989cac"), Title: "Open Source AI Contributor"},
{ID: uuid.MustParse("0199b964-5dc0-774e-9011-b9fe6c29f52f"), Title: "AI Course Instructor (Udemy, Coursera, etc.)"},
{ID: uuid.MustParse("0199b964-5dc0-7f1d-80a4-96810af9f9ac"), Title: "AI Community Manager"},
{ID: uuid.MustParse("0199b964-5dc0-7352-8553-edd37324ffd9"), Title: "AI Evangelist"},
{ID: uuid.MustParse("0199b964-5dc0-7864-a2b5-473cfd8f7aa0"), Title: "Research Engineer (applied AI research, publishing GitHub repos)"},
{ID: uuid.MustParse("0199b964-5dc0-762e-9a40-0cc112578498"), Title: "Kaggle Competitor / Data Science Challenger"},
{ID: uuid.MustParse("0199b964-5dc0-7e13-a1f4-b4ae76bb0b62"), Title: "AI Startup Founder / Indie Hacker (building projects, sharing repos)"},
{ID: uuid.MustParse("0199b964-5dc0-7035-bf9b-deb415d852fd"), Title: "Freelancer"},
{ID: uuid.MustParse("0199b964-5dc0-7702-b533-72f7c93e19d3"), Title: "Other"},
}
// mockRoleRepository returns mocked profile roles (no DB).
type mockRoleRepository struct {
mu sync.RWMutex
data []*domainProfile.Role
}
// NewMockRoleRepository creates a RoleRepository that returns mocked data.
func NewMockRoleRepository() domainProfile.RoleRepository {
data := make([]*domainProfile.Role, len(mockRoleData))
for i, r := range mockRoleData {
data[i] = &domainProfile.Role{ID: r.ID, Title: r.Title}
}
return &mockRoleRepository{data: data}
}
func (r *mockRoleRepository) FindByID(ctx context.Context, id uuid.UUID) (*domainProfile.Role, error) {
r.mu.RLock()
defer r.mu.RUnlock()
for _, role := range r.data {
if role.ID == id {
return &domainProfile.Role{ID: role.ID, Title: role.Title}, nil
}
}
return nil, domainProfile.ErrRoleNotFound
}
func (r *mockRoleRepository) FindAll(ctx context.Context) ([]*domainProfile.Role, error) {
r.mu.RLock()
defer r.mu.RUnlock()
out := make([]*domainProfile.Role, len(r.data))
for i, role := range r.data {
out[i] = &domainProfile.Role{ID: role.ID, Title: role.Title}
}
return out, nil
}
func (r *mockRoleRepository) List(ctx context.Context, limit, offset int) ([]*domainProfile.Role, error) {
r.mu.RLock()
defer r.mu.RUnlock()
start := offset
if start > len(r.data) {
start = len(r.data)
}
end := start + limit
if limit <= 0 {
end = len(r.data)
} else if end > len(r.data) {
end = len(r.data)
}
slice := r.data[start:end]
out := make([]*domainProfile.Role, len(slice))
for i, role := range slice {
out[i] = &domainProfile.Role{ID: role.ID, Title: role.Title}
}
return out, nil
}
func (r *mockRoleRepository) Create(ctx context.Context, role *domainProfile.Role) error {
r.mu.Lock()
defer r.mu.Unlock()
r.data = append(r.data, &domainProfile.Role{ID: role.ID, Title: role.Title})
return nil
}
func (r *mockRoleRepository) Update(ctx context.Context, role *domainProfile.Role) error {
r.mu.Lock()
defer r.mu.Unlock()
for i, existing := range r.data {
if existing.ID == role.ID {
r.data[i] = &domainProfile.Role{ID: role.ID, Title: role.Title}
return nil
}
}
return domainProfile.ErrRoleNotFound
}
func (r *mockRoleRepository) Delete(ctx context.Context, id uuid.UUID) error {
r.mu.Lock()
defer r.mu.Unlock()
for i, role := range r.data {
if role.ID == id {
r.data = append(r.data[:i], r.data[i+1:]...)
return nil
}
}
return domainProfile.ErrRoleNotFound
}