go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/chirp/pkg/model/notification_full.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package model 9 10 import ( 11 "go.charczuk.com/sdk/apputil" 12 "go.charczuk.com/sdk/db" 13 ) 14 15 // NotificationFull is a notification with 16 // associated information. 17 type NotificationFull struct { 18 Notification 19 ActingUser UserFull 20 Chirp *Chirp 21 } 22 23 var ( 24 prefixNotificationMeta = db.TypeMetaFor(Notification{}).CopyWithColumnPrefix("notification_") 25 prefixNotificationActingUserMeta = db.TypeMetaFor(apputil.User{}).CopyWithColumnPrefix("user_") 26 prefixNotificationActingUserInfoMeta = db.TypeMetaFor(UserInfo{}).CopyWithColumnPrefix("userinfo_") 27 prefixNotificationActingUserStatusMeta = db.TypeMetaFor(UserStatus{}).CopyWithColumnPrefix("userstatus_") 28 prefixNotificationChirpMeta = db.TypeMetaFor(Chirp{}).CopyWithColumnPrefix("chirp_") 29 ) 30 31 // Populate implements the populate body for database query methods. 32 func (nf *NotificationFull) Populate(row db.Rows) error { 33 if err := db.PopulateByName(&nf.Notification, row, prefixNotificationMeta); err != nil { 34 return err 35 } 36 if err := db.PopulateByName(&nf.ActingUser.User, row, prefixNotificationActingUserMeta); err != nil { 37 return err 38 } 39 if err := db.PopulateByName(&nf.ActingUser.Info, row, prefixNotificationActingUserInfoMeta); err != nil { 40 return err 41 } 42 if err := db.PopulateByName(&nf.ActingUser.Status, row, prefixNotificationActingUserStatusMeta); err != nil { 43 return err 44 } 45 if nf.ChirpID != nil && !nf.ChirpID.IsZero() { 46 var chirp Chirp 47 if err := db.PopulateByName(&chirp, row, prefixNotificationChirpMeta); err != nil { 48 return err 49 } 50 nf.Chirp = &chirp 51 } 52 return nil 53 }