I don’t know what the culprit is in this issue, the first time I run this REST API it works fine then I run it the 2nd time and I get this error “Invalid Transaction, Invalid Transaction, …”
This is my controller/handler in Golang:
func (c ChatApiService) CreateRoom(ctx context.Context, room openapi.Room) (openapi.ImplResponse, error) {
// Create the Room
createRoom, err := service.CreateRoom(room, c.db)
if err != nil {
return openapi.ImplResponse{}, err
}
// Add users to the room
if room.Users != nil && len(room.Users) > 0 {
for _, userId := range room.Users {
err := service.AssignUserToRoom(userId, createRoom.Id, models.RoomRoleMember, c.db)
if err != nil {
return openapi.ImplResponse{}, err
}
}
}
return openapi.ImplResponse{
Code: 200,
Body: createRoom,
}, nil
}
This is my service function in Golang:
func CreateRoom(room openapi.Room, db *gorm.DB) (openapi.Room, error) {
var roomType models.RoomType
roomId := uuid.New().String()
switch room.RoomType {
case "ORGANIZATION":
roomType = models.RoomTypeOrganization
case "GROUP":
roomType = models.RoomTypeGroup
case "PRIVATE":
roomType = models.RoomTypePrivate
case "ADMIN":
roomType = models.RoomTypeAdmin
default:
return openapi.Room{}, errors.New("Invalid Room Type")
}
// Create Room
newRoom := models.Room{
ID: roomId,
Title: room.Title,
RoomType: roomType,
CreatedBy: room.CreatedBy,
Status: models.StatusActive,
ModifiedAt: time.Now(),
CreatedAt: time.Now(),
}
logger.Logger.Info("Create Room", zap.Any("newRoom", newRoom))
savedRoom := db.Create(&newRoom)
if savedRoom.Error != nil {
logger.Logger.Error("Error saving room", zap.Error(savedRoom.Error))
return openapi.Room{}, savedRoom.Error
}
savedRoom.Commit()
if room.RoomType == "ORGANIZATION" {
err := CreateRoomOrganization(newRoom.ID, room, db)
if err != nil {
return openapi.Room{}, err
}
} else if room.RoomType == "GROUP" {
err := CreateGroupRoom(newRoom.ID, room, db)
if err != nil {
return openapi.Room{}, err
}
} else if room.RoomType == "PRIVATE" {
err := CreatePrivateRoom(newRoom.ID, room, db)
if err != nil {
return openapi.Room{}, err
}
} else if room.RoomType == "ADMIN" {
err := CreateAdminRoom(newRoom.ID, room, db)
if err != nil {
return openapi.Room{}, err
}
} else {
return openapi.Room{}, errors.New("invalid Room Type")
}
return dto.RoomDTO(newRoom), nil
}
Below is the full error:
"error":"invalid transaction; invalid transaction; invalid transaction; invalid transaction; invalid transaction; invalid transaction; invalid transaction","stacktrace":"bityagi/src/service.CreateRoomnt/Users/mabeloza/GolandProjects/patshala/backend/src/service/room_service.go:51nbityagi/src/handlers.ChatApiService.CreateRoomnt/Users/mabeloza/GolandProjects/patshala/backend/src/handlers/room_handler.go:32nbuild/code/spec/src.(*ChatAPIController).CreateRoomnt/Users/mabeloza/GolandProjects/patshala/backend/build/generated/src/api_chat.go:121nnet/http.HandlerFunc.ServeHTTPnt/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/server.go:2166ngithub.com/go-chi/chi/v5.(*Mux).routeHTTPnt/Users/mabeloza/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:444nnet/http.HandlerFunc.ServeHTTPnt/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/server.go:2166ngithub.com/go-chi/cors.(*Cors).Handler-fm.(*Cors).Handler.func1nt/Users/mabeloza/go/pkg/mod/github.com/go-chi/[email protected]/cors.go:228nnet/http.HandlerFunc.ServeHTTPnt/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/server.go:2166ngithub.com/go-chi/chi/v5/middleware.init.0.RequestLogger.func1.1nt/Users/mabeloza/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/logger.go:54nnet/http.HandlerFunc.ServeHTTPnt/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/server.go:2166ngithub.com/go-chi/chi/v5.(*Mux).ServeHTTPnt/Users/mabeloza/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:90nnet/http.serverHandler.ServeHTTPnt/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/server.go:3137nnet/http.(*conn).servent/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/server.go:2039"}
This is my log:
{"level":"info","ts":1716237267.974571,"caller":"service/room_service.go:47","msg":"Create Room","newRoom":{"id":"21758551-f470-4532-92c9-2f857ff0e989","title":"Johnny & Jane","description":{"String":"","Valid":false},"image_url":{"String":"","Valid":false},"room_type":"PRIVATE","last_message":{"String":"","Valid":false},"status":"ACTIVE","created_by":"814caa91-3494-46ba-8316-f3ae0d11a34c","created_at":"2024-05-20T15:34:27.974549-05:00","modified_at":"2024-05-20T15:34:27.974549-05:00"}}
{"level":"error","ts":1716237267.974646,"caller":"service/room_service.go:51","msg":"Error saving room","error":"invalid transaction; invalid transaction; invalid transaction; invalid transaction; invalid transaction; invalid transaction; invalid transaction","stacktrace":"bityagi/src/service.CreateRoomnt/Users/mabeloza/Golan