2021-05-27 16:06:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/ * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   GoToSocial 
							 
						 
					
						
							
								
									
										
										
										
											2023-01-05 12:43:00 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								   Copyright  ( C )  2021 - 2023  GoToSocial  Authors  admin @ gotosocial . org 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-27 16:06:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   This  program  is  free  software :  you  can  redistribute  it  and / or  modify 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   it  under  the  terms  of  the  GNU  Affero  General  Public  License  as  published  by 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   the  Free  Software  Foundation ,  either  version  3  of  the  License ,  or 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   ( at  your  option )  any  later  version . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   This  program  is  distributed  in  the  hope  that  it  will  be  useful , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   but  WITHOUT  ANY  WARRANTY ;  without  even  the  implied  warranty  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR  PURPOSE .   See  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   GNU  Affero  General  Public  License  for  more  details . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   You  should  have  received  a  copy  of  the  GNU  Affero  General  Public  License 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   along  with  this  program .   If  not ,  see  < http : //www.gnu.org/licenses/>. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								package  gtsmodel 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  "time" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Notification models an alert/notification sent to an account about something like a reblog, like, new follow request, etc. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  Notification  struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-01 18:29:25 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									ID                string            ` validate:"required,ulid" bun:"type:CHAR(26),pk,nullzero,notnull,unique" `                                                                                                                                     // id of this item in the database 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-20 17:41:52 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									CreatedAt         time . Time         ` validate:"-" bun:"type:timestamptz,nullzero,notnull,default:current_timestamp" `                                                                                                                              // when was item created 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 17:23:14 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									UpdatedAt         time . Time         ` validate:"-" bun:"type:timestamptz,nullzero,notnull,default:current_timestamp" `                                                                                                                              // when was item last updated 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-30 20:20:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									NotificationType  NotificationType  ` validate:"oneof=follow follow_request mention reblog favourite poll status" bun:",nullzero,notnull" `                                                                                                         // Type of this notification 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 17:23:14 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									TargetAccountID   string            ` validate:"ulid" bun:"type:CHAR(26),nullzero,notnull" `                                                                                                                                                        // ID of the account targeted by the notification (ie., who will receive the notification?) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									TargetAccount     * Account          ` validate:"-" bun:"-" `                                                                                                                                                                                        // Account corresponding to TargetAccountID. Can be nil, always check first + select using ID if necessary. 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-30 20:20:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									OriginAccountID   string            ` validate:"ulid" bun:"type:CHAR(26),nullzero,notnull" `                                                                                                                                                        // ID of the account that performed the action that created the notification. 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 17:23:14 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									OriginAccount     * Account          ` validate:"-" bun:"-" `                                                                                                                                                                                        // Account corresponding to OriginAccountID. Can be nil, always check first + select using ID if necessary. 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-30 20:20:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									StatusID          string            ` validate:"required_if=NotificationType mention,required_if=NotificationType reblog,required_if=NotificationType favourite,required_if=NotificationType status,omitempty,ulid" bun:"type:CHAR(26),nullzero" `  // If the notification pertains to a status, what is the database ID of that status? 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-18 17:23:14 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									Status            * Status           ` validate:"-" bun:"-" `                                                                                                                                                                                        // Status corresponding to StatusID. Can be nil, always check first + select using ID if necessary. 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-15 12:35:05 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									Read              * bool             ` validate:"-" bun:",nullzero,notnull,default:false" `                                                                                                                                                          // Notification has been seen/read 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-27 16:06:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// NotificationType describes the reason/type of this notification. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  NotificationType  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-31 15:59:12 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Notification Types 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-27 16:06:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								const  ( 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-30 20:20:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									NotificationFollow         NotificationType  =  "follow"          // NotificationFollow -- someone followed you 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NotificationFollowRequest  NotificationType  =  "follow_request"  // NotificationFollowRequest -- someone requested to follow you 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NotificationMention        NotificationType  =  "mention"         // NotificationMention -- someone mentioned you in their status 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NotificationReblog         NotificationType  =  "reblog"          // NotificationReblog -- someone boosted one of your statuses 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NotificationFave           NotificationType  =  "favourite"       // NotificationFave -- someone faved/liked one of your statuses 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NotificationPoll           NotificationType  =  "poll"            // NotificationPoll -- a poll you voted in or created has ended 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NotificationStatus         NotificationType  =  "status"          // NotificationStatus -- someone you enabled notifications for has posted a status. 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-27 16:06:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								)