2023-03-12 16:00:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// GoToSocial  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Copyright (C) GoToSocial Authors admin@gotosocial.org  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// SPDX-License-Identifier: AGPL-3.0-or-later  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// 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/>.  
						 
					
						
							
								
									
										
										
										
											2021-05-27 16:06:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)