Skip to content

Commit

Permalink
Merge pull request #33 from Turizak/patchQuest
Browse files Browse the repository at this point in the history
patch quest
  • Loading branch information
rakazirut authored Dec 27, 2024
2 parents 3f47d39 + 7ead9e4 commit b2bbe26
Show file tree
Hide file tree
Showing 6 changed files with 149 additions and 8 deletions.
30 changes: 30 additions & 0 deletions bruno/fables/Quests/PATCH/Update Quest.bru
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
meta {
name: Update Quest
type: http
seq: 1
}

patch {
url: {{base_url}}/campaign/:uuid/quest/:questUuid/update
body: json
auth: bearer
}

params:path {
uuid: 8335f613-ff58-496c-868d-3ab850ee949f
questUuid: 8e24f248-eedc-4ace-9829-05a51adc95e7
}

auth:bearer {
token: {{token}}
}

body:json {
{
"name": "First Quest Updated",
"partyUuids": [
"a2a4d099-16bc-4276-b147-b07ccb8c334d",
"2ede741c-4a2c-42cc-b174-45a2e18538e2"
]
}
}
2 changes: 1 addition & 1 deletion bruno/fables/Quests/POST/Create Quest.bru
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ post {
}

params:path {
uuid:
uuid: 8335f613-ff58-496c-868d-3ab850ee949f
}

auth:bearer {
Expand Down
65 changes: 65 additions & 0 deletions src/fables-be/quest/quest.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,71 @@ func GetQuestsByCampaignUuid(c *gin.Context) {
utilities.ResponseMessage(c, "Quests retrieved successfully.", http.StatusOK, gin.H{"quests": mapQuestsToResponse(quests)})
}

func UpdateQuestByUuid(c *gin.Context) {
_, authorized := utilities.AuthorizeRequest(c)
if !authorized {
return
}

campaignUuid := c.Param("uuid")
questUuid := c.Param("questUuid")
quest, err := GetQuestByUuidDB(questUuid, campaignUuid)
if err != nil {
utilities.ResponseMessage(c, "Could not update Quest. Please try again.", http.StatusInternalServerError, nil)
return
}

var updatedQuest UpdateQuest
if err := c.BindJSON(&updatedQuest); err != nil {
utilities.ResponseMessage(c, "Could not update Quest. Please try again.", http.StatusBadRequest, nil)
return
}

if updatedQuest.CampaignUUID != nil {
quest.CampaignUUID = *updatedQuest.CampaignUUID
}
if updatedQuest.Name != nil {
quest.Name = *updatedQuest.Name
}
if updatedQuest.Description != nil {
quest.Description = *updatedQuest.Description
}
if updatedQuest.PartyUUIDs != nil {
quest.PartyUUIDs = updatedQuest.PartyUUIDs
}
if updatedQuest.NpcUUIDs != nil {
quest.NpcUUIDs = updatedQuest.NpcUUIDs
}
if updatedQuest.BossUUIDs != nil {
quest.BossUUIDs = updatedQuest.BossUUIDs
}
if updatedQuest.LocationUUIDs != nil {
quest.LocationUUIDs = updatedQuest.LocationUUIDs
}
if updatedQuest.RewardUUIDs != nil {
quest.RewardUUIDs = updatedQuest.RewardUUIDs
}
if updatedQuest.StartingSessionUUID != nil {
quest.StartingSessionUUID = *updatedQuest.StartingSessionUUID
}
if updatedQuest.EndingSessionUUID != nil {
quest.EndingSessionUUID = *updatedQuest.EndingSessionUUID
}
if updatedQuest.Status != nil {
quest.Status = *updatedQuest.Status
}
if updatedQuest.Deleted != nil {
quest.Deleted = *updatedQuest.Deleted
}

if err := UpdateQuestByUuidDB(&quest, campaignUuid); err != nil {
utilities.ResponseMessage(c, "Could not update Quest. Please try again.", http.StatusInternalServerError, nil)
return
}

utilities.ResponseMessage(c, "Quest updated successfully.", http.StatusOK, gin.H{"quest": CreateQuestResponse(quest)})
}

func CreateQuestResponse(quest campaign.Quest) QuestResponse {
return QuestResponse{
UUID: &quest.UUID,
Expand Down
43 changes: 36 additions & 7 deletions src/fables-be/quest/questDB.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,8 @@ func CreateQuestDB(quest *campaign.Quest, campaignUuid string) error {
if result := database.DB.Table(tableName).Create(quest); result.Error != nil {
return result.Error
}
//check the bossUUIDs and if they are not empty, select the npc from the npc table and mark them as a boss
if len(quest.BossUUIDs) > 0 {
for _, bossUUID := range quest.BossUUIDs {
if err := npc.MarkNpcAsBossDB(bossUUID, campaignUuid, quest.UUID); err != nil {
return err
}
}
if err := markBossNpcs(quest, campaignUuid); err != nil {
return err
}
return nil
}
Expand Down Expand Up @@ -63,3 +58,37 @@ func GetQuestsByCampaignUuidDB(campaignUuid string) ([]campaign.Quest, error) {
}
return quests, nil
}

func UpdateQuestByUuidDB(quest *campaign.Quest, campaignUuid string) error {
camp, err := campaign.GetCampaignByUuidDB(campaignUuid)
if err != nil {
return err
}
tableName := fmt.Sprintf("%s_quests", camp.Moniker)
quest.LastUpdated = utilities.ToNullTime(pq.NullTime{Time: time.Now(), Valid: true})

result := database.DB.Table(tableName).Save(quest)

if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return fmt.Errorf("no quest found with UUID %s in campaign %s", quest.UUID, campaignUuid)
}

if err := markBossNpcs(quest, campaignUuid); err != nil {
return err
}
return nil
}

func markBossNpcs(quest *campaign.Quest, campaignUuid string) error {
if len(quest.BossUUIDs) > 0 {
for _, bossUUID := range quest.BossUUIDs {
if err := npc.MarkNpcAsBossDB(bossUUID, campaignUuid, quest.UUID); err != nil {
return err
}
}
}
return nil
}
15 changes: 15 additions & 0 deletions src/fables-be/quest/questTypes.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,18 @@ type QuestResponse struct {
Created utilities.NullTime `json:"created"`
LastUpdated utilities.NullTime `json:"lastUpdated"`
}

type UpdateQuest struct {
CampaignUUID *string `json:"campaignUuid"`
Name *string `json:"name"`
Description *string `json:"description"`
PartyUUIDs []string `json:"partyUuids"`
NpcUUIDs []string `json:"npcUuids"`
BossUUIDs []string `json:"bossUuids"`
LocationUUIDs []string `json:"locationUuids"`
RewardUUIDs []string `json:"rewardUuids"`
StartingSessionUUID *string `json:"startingSessionUuid"`
EndingSessionUUID *string `json:"endingSessionUuid"`
Status *string `json:"status"`
Deleted *bool `json:"deleted"`
}
2 changes: 2 additions & 0 deletions src/fables-be/routes/routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ func Routes(router *gin.Engine) {
router.GET("/api/campaign/:uuid/session/:sessionUuid/all", collection.GetAllSessionData)

// Campaign - Quests
//PATCH
router.PATCH("/api/campaign/:uuid/quest/:questUuid/update", quest.UpdateQuestByUuid)
// POST
router.POST("/api/campaign/:uuid/quest/create", quest.CreateQuest)
// GET
Expand Down

0 comments on commit b2bbe26

Please sign in to comment.