@@ -43,10 +43,11 @@ func requestURL(c *gin.Context) string {
4343 return scheme + "://" + c .Request .Host + forwardedPrefix + c .Request .URL .Path
4444}
4545
46- func checkBudgetExists (c * gin.Context , budgetIDString string ) (uint64 , error ) {
46+ // getBudget verifies that the budget from the URL parameters exists and returns it.
47+ func getBudget (c * gin.Context ) (models.Budget , error ) {
4748 var budget models.Budget
4849
49- budgetID , _ := strconv .ParseUint (budgetIDString , 10 , 64 )
50+ budgetID , _ := strconv .ParseUint (c . Param ( "budgetId" ) , 10 , 64 )
5051
5152 // Check that the budget exists. If not, return a 404
5253 err := models .DB .Where (& models.Budget {
@@ -56,10 +57,62 @@ func checkBudgetExists(c *gin.Context, budgetIDString string) (uint64, error) {
5657 }).First (& budget ).Error
5758 if err != nil {
5859 FetchErrorHandler (c , err )
59- return 0 , err
60+ return models. Budget {} , err
6061 }
6162
62- return budgetID , nil
63+ return budget , nil
64+ }
65+
66+ // getCategory verifies that the category from the URL parameters exists and returns it
67+ //
68+ // It also verifies that the budget that is referred to exists.
69+ func getCategory (c * gin.Context ) (models.Category , error ) {
70+ var category models.Category
71+
72+ categoryID , _ := strconv .ParseUint (c .Param ("categoryId" ), 10 , 64 )
73+
74+ _ , err := getBudget (c )
75+ if err != nil {
76+ return models.Category {}, err
77+ }
78+
79+ err = models .DB .Where (& models.Category {
80+ Model : models.Model {
81+ ID : categoryID ,
82+ },
83+ }).First (& category ).Error
84+ if err != nil {
85+ FetchErrorHandler (c , err )
86+ return models.Category {}, err
87+ }
88+
89+ return category , nil
90+ }
91+
92+ // getEnvelope verifies that the envelope from the URL parameters exists and returns it
93+ //
94+ // It also verifies that the budget and the category that are referred to exist.
95+ func getEnvelope (c * gin.Context ) (models.Envelope , error ) {
96+ var envelope models.Envelope
97+
98+ envelopeID , _ := strconv .ParseUint (c .Param ("envelopeId" ), 10 , 64 )
99+
100+ _ , err := getCategory (c )
101+ if err != nil {
102+ return models.Envelope {}, err
103+ }
104+
105+ err = models .DB .Where (& models.Envelope {
106+ Model : models.Model {
107+ ID : envelopeID ,
108+ },
109+ }).First (& envelope ).Error
110+ if err != nil {
111+ FetchErrorHandler (c , err )
112+ return models.Envelope {}, err
113+ }
114+
115+ return envelope , nil
63116}
64117
65118// FetchErrorHandler handles errors for fetching data from the database.
0 commit comments