A fork of the Cocoon PDS but being made more distributed.
11

Configure Feed

Select the types of activity you want to include in your feed.

unique key error handling

Signed-off-by: Will <did:plc:dadhhalkfcq3gucaq25hjqon>

willdot.net (Jun 6, 2026, 3:27 PM +0100) 7a1f0a5d bb16c566

+7 -4
+1 -1
server/persist.go
··· 68 68 // retry which will increase the sequence number again and hopefully work. Any others 69 69 // can error out. 70 70 retryIfFunc := func(err error) bool { 71 - return errors.Is(gorm.ErrCheckConstraintViolated, err) 71 + return errors.Is(err, gorm.ErrDuplicatedKey) 72 72 } 73 73 err := retry.Do(func() error { 74 74 rec.Seq++
+6 -3
server/server.go
··· 349 349 350 350 var gdb *gorm.DB 351 351 var err error 352 + gormCfg := gorm.Config{ 353 + TranslateError: true, 354 + } 352 355 switch dbType { 353 356 case "postgres": 354 357 if args.DatabaseURL == "" { 355 358 return nil, fmt.Errorf("database-url must be set when using postgres") 356 359 } 357 - gdb, err = gorm.Open(postgres.Open(args.DatabaseURL), &gorm.Config{}) 360 + gdb, err = gorm.Open(postgres.Open(args.DatabaseURL), &gormCfg) 358 361 if err != nil { 359 362 return nil, fmt.Errorf("failed to connect to postgres: %w", err) 360 363 } ··· 366 369 db, err := sql.Open("libsql", fmt.Sprintf("%s?authToken=%s", primaryUrl, authToken)) 367 370 gdb, err = gorm.Open(sqlite.New(sqlite.Config{ 368 371 Conn: db, 369 - }), &gorm.Config{}) 372 + }), &gormCfg) 370 373 if err != nil { 371 374 return nil, fmt.Errorf("failed to connect to postgres: %w", err) 372 375 } 373 376 logger.Info("connected to PostgreSQL database") 374 377 375 378 default: 376 - gdb, err = gorm.Open(sqlite.Open(args.DbName), &gorm.Config{}) 379 + gdb, err = gorm.Open(sqlite.Open(args.DbName), &gormCfg) 377 380 if err != nil { 378 381 return nil, fmt.Errorf("failed to open sqlite database: %w", err) 379 382 }