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 }