// cmd/run-server/seed/seed_fixed.go package seed import ( "log" "clapclap/internal/models" "clapclap/internal/uuid" "golang.org/x/crypto/bcrypt" "gorm.io/datatypes" "gorm.io/gorm" "gorm.io/gorm/clause" ) func seedFixedTestData(db *gorm.DB) error { log.Println("↳ [TESTING] Injecting 4 deterministic fixed testing profiles with hardcoded UUIDs...") hasher, _ := bcrypt.GenerateFromPassword([]byte("password123"), bcrypt.DefaultCost) sharedHash := string(hasher) idAdmin := uuid.MustParse("11111111-1111-4111-8111-111111111111") idProducer := uuid.MustParse("22222222-2222-4222-8222-222222222222") idArtist := uuid.MustParse("33333333-3333-4333-8333-333333333333") idReviewer := uuid.MustParse("44444444-4444-4444-8444-444444444444") idGenre := uuid.MustParse("aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa") // 1. Users admin := models.User{Base: models.Base{ID: idAdmin}, Username: "user_1", Email: "user_1@test.io", HashedPassword: sharedHash, Avatar: "https://api.dicebear.com/7.x/bottts/svg?seed=user_1", IsVerified: true} producer := models.User{Base: models.Base{ID: idProducer}, Username: "user_2", Email: "user_2@test.io", HashedPassword: sharedHash, Avatar: "https://api.dicebear.com/7.x/bottts/svg?seed=user_2", IsVerified: true} artist := models.User{Base: models.Base{ID: idArtist}, Username: "user_3", Email: "user_3@test.io", HashedPassword: sharedHash, Avatar: "https://api.dicebear.com/7.x/bottts/svg?seed=user_3", IsVerified: true} reviewer := models.User{Base: models.Base{ID: idReviewer}, Username: "user_4", Email: "user_4@test.io", HashedPassword: sharedHash, Avatar: "https://api.dicebear.com/7.x/bottts/svg?seed=user_4", IsVerified: true} testUsers := []models.User{admin, producer, artist, reviewer} db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&testUsers) // 2. Fixed Testing Genre fixedGenre := models.Genre{Base: models.Base{ID: idGenre}, Name: "Testing Audio"} db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&fixedGenre) // 3. Projects idRootProject := uuid.MustParse("55555555-5555-4555-8555-555555555555") prodRoot := models.Project{ Base: models.Base{ID: idRootProject}, Name: "Fixed Test Project", Description: "Test Project", Visibility: models.VisibilityPrivate, OwnerID: idProducer, JSONProject: datatypes.JSON([]byte(`{"bpm": 110, "tracks": []}`)), } db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&prodRoot) // 4. Tracks idTrackV1 := uuid.MustParse("66666666-6666-4666-8666-666666666666") idTrackV2 := uuid.MustParse("77777777-7777-4777-8777-777777777777") // Helper variable for the *bool pointer isPublicTrue := true v1Track := models.Track{ Base: models.Base{ID: idTrackV1}, Name: "Fixed Test Single", AudioFile: "tracks/public/audios/test_v1.mp3", OwnerID: idProducer, GenreID: idGenre, IsPublic: isPublicTrue, } db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&v1Track) v2Track := models.Track{ Base: models.Base{ID: idTrackV2}, Name: "Fixed Test Single", AudioFile: "tracks/public/audios/test_v2.mp3", OwnerID: idProducer, GenreID: idGenre, IsPublic: isPublicTrue, AverageRating: 9.0, RatingCount: 2, } db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&v2Track) // 5. Social idComment1 := uuid.MustParse("88888888-8888-4888-8888-888888888888") idComment2 := uuid.MustParse("99999999-9999-4999-8999-999999999999") rootComment := models.Comment{Base: models.Base{ID: idComment1}, Content: "Sub-bass clipping.", TrackID: idTrackV2, AuthorID: idReviewer} db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&rootComment) replyComment := models.Comment{Base: models.Base{ID: idComment2}, Content: "Fixing compression.", TrackID: idTrackV2, AuthorID: idArtist, ReplyToID: &idComment1} db.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "id"}}, DoNothing: true}).Create(&replyComment) db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "author_id"}, {Name: "track_id"}}, DoNothing: true, }).Create(&models.Rating{Value: 8, TrackID: idTrackV2, AuthorID: idReviewer}) db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "author_id"}, {Name: "track_id"}}, DoNothing: true, }).Create(&models.Rating{Value: 10, TrackID: idTrackV2, AuthorID: idAdmin}) return nil }