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  }