Coffee journaling on ATProto (alpha) alpha.arabica.social
coffee
17
fork

Configure Feed

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

fix: json export fixes

+20 -15
+12 -12
internal/database/sqlite/sqlite.go
··· 137 137 b.id, b.user_id, b.bean_id, b.method, b.temperature, b.water_amount, 138 138 b.time_seconds, b.grind_size, b.grinder, b.grinder_id, b.brewer_id, b.tasting_notes, b.rating, b.created_at, 139 139 bn.id, bn.name, bn.origin, bn.roast_level, bn.process, bn.description, bn.roaster_id, 140 - COALESCE(r.id, 0), COALESCE(r.name, ''), 141 - COALESCE(g.id, 0), COALESCE(g.name, ''), 142 - COALESCE(br.id, 0), COALESCE(br.name, '') 140 + COALESCE(r.id, 0), COALESCE(r.name, ''), COALESCE(r.location, ''), COALESCE(r.website, ''), 141 + COALESCE(g.id, 0), COALESCE(g.name, ''), COALESCE(g.grinder_type, ''), COALESCE(g.burr_type, ''), COALESCE(g.notes, ''), 142 + COALESCE(br.id, 0), COALESCE(br.name, ''), COALESCE(br.description, '') 143 143 FROM brews b 144 144 JOIN beans bn ON b.bean_id = bn.id 145 145 LEFT JOIN roasters r ON bn.roaster_id = r.id ··· 150 150 &brew.ID, &brew.UserID, &brew.BeanID, &brew.Method, &brew.Temperature, &brew.WaterAmount, 151 151 &brew.TimeSeconds, &brew.GrindSize, &brew.Grinder, &brew.GrinderID, &brew.BrewerID, &brew.TastingNotes, &brew.Rating, &brew.CreatedAt, 152 152 &brew.Bean.ID, &brew.Bean.Name, &brew.Bean.Origin, &brew.Bean.RoastLevel, &brew.Bean.Process, &brew.Bean.Description, &brew.Bean.RoasterID, 153 - &brew.Bean.Roaster.ID, &brew.Bean.Roaster.Name, 154 - &brew.GrinderObj.ID, &brew.GrinderObj.Name, 155 - &brew.BrewerObj.ID, &brew.BrewerObj.Name, 153 + &brew.Bean.Roaster.ID, &brew.Bean.Roaster.Name, &brew.Bean.Roaster.Location, &brew.Bean.Roaster.Website, 154 + &brew.GrinderObj.ID, &brew.GrinderObj.Name, &brew.GrinderObj.GrinderType, &brew.GrinderObj.BurrType, &brew.GrinderObj.Notes, 155 + &brew.BrewerObj.ID, &brew.BrewerObj.Name, &brew.BrewerObj.Description, 156 156 ) 157 157 158 158 if err != nil { ··· 175 175 b.id, b.user_id, b.bean_id, b.method, b.temperature, b.water_amount, 176 176 b.time_seconds, b.grind_size, b.grinder, b.grinder_id, b.brewer_id, b.tasting_notes, b.rating, b.created_at, 177 177 bn.id, bn.name, bn.origin, bn.roast_level, bn.process, bn.description, bn.roaster_id, 178 - COALESCE(r.id, 0), COALESCE(r.name, ''), 179 - COALESCE(g.id, 0), COALESCE(g.name, ''), 180 - COALESCE(br.id, 0), COALESCE(br.name, '') 178 + COALESCE(r.id, 0), COALESCE(r.name, ''), COALESCE(r.location, ''), COALESCE(r.website, ''), 179 + COALESCE(g.id, 0), COALESCE(g.name, ''), COALESCE(g.grinder_type, ''), COALESCE(g.burr_type, ''), COALESCE(g.notes, ''), 180 + COALESCE(br.id, 0), COALESCE(br.name, ''), COALESCE(br.description, '') 181 181 FROM brews b 182 182 JOIN beans bn ON b.bean_id = bn.id 183 183 LEFT JOIN roasters r ON bn.roaster_id = r.id ··· 206 206 &brew.ID, &brew.UserID, &brew.BeanID, &brew.Method, &brew.Temperature, &brew.WaterAmount, 207 207 &brew.TimeSeconds, &brew.GrindSize, &brew.Grinder, &brew.GrinderID, &brew.BrewerID, &brew.TastingNotes, &brew.Rating, &brew.CreatedAt, 208 208 &brew.Bean.ID, &brew.Bean.Name, &brew.Bean.Origin, &brew.Bean.RoastLevel, &brew.Bean.Process, &brew.Bean.Description, &brew.Bean.RoasterID, 209 - &brew.Bean.Roaster.ID, &brew.Bean.Roaster.Name, 210 - &brew.GrinderObj.ID, &brew.GrinderObj.Name, 211 - &brew.BrewerObj.ID, &brew.BrewerObj.Name, 209 + &brew.Bean.Roaster.ID, &brew.Bean.Roaster.Name, &brew.Bean.Roaster.Location, &brew.Bean.Roaster.Website, 210 + &brew.GrinderObj.ID, &brew.GrinderObj.Name, &brew.GrinderObj.GrinderType, &brew.GrinderObj.BurrType, &brew.GrinderObj.Notes, 211 + &brew.BrewerObj.ID, &brew.BrewerObj.Name, &brew.BrewerObj.Description, 212 212 ) 213 213 214 214 if err != nil {
+2 -2
internal/models/models.go
··· 59 59 ID int `json:"id"` 60 60 UserID int `json:"user_id"` 61 61 BeanID int `json:"bean_id"` 62 - Method string `json:"method"` 62 + Method string `json:"method,omitempty"` 63 63 Temperature float64 `json:"temperature"` 64 64 WaterAmount int `json:"water_amount"` 65 65 TimeSeconds int `json:"time_seconds"` 66 66 GrindSize string `json:"grind_size"` 67 - Grinder string `json:"grinder"` 67 + Grinder string `json:"grinder,omitempty"` 68 68 GrinderID *int `json:"grinder_id"` 69 69 BrewerID *int `json:"brewer_id"` 70 70 TastingNotes string `json:"tasting_notes"`
+1 -1
internal/templates/brew_form.templ
··· 267 267 name="temperature" 268 268 step="0.1" 269 269 if brew != nil && brew.Temperature > 0 { 270 - value={ formatTemp(brew.Temperature) } 270 + value={ formatTempValue(brew.Temperature) } 271 271 } 272 272 placeholder="e.g. 93.5" 273 273 class="w-full rounded-md border-gray-300 shadow-sm focus:border-brown-500 focus:ring-brown-500 text-base py-3 px-4"/>
+5
internal/templates/helpers.go
··· 14 14 return fmt.Sprintf("%.1f°C", temp) 15 15 } 16 16 17 + func formatTempValue(temp float64) string { 18 + // For use in input fields - returns just the numeric value 19 + return fmt.Sprintf("%.1f", temp) 20 + } 21 + 17 22 func formatTime(seconds int) string { 18 23 if seconds == 0 { 19 24 return "N/A"