mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-10-23 05:11:57 +00:00
- single table stores acitivites against entities, actors, timestamps, ip addresses and activity description. - admin page to view, sort and filter activity logs. - new `activity_logs:manage` permission
81 lines
3.2 KiB
Go
81 lines
3.2 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"slices"
|
|
"time"
|
|
|
|
rmodels "github.com/abhinavxd/libredesk/internal/role/models"
|
|
tmodels "github.com/abhinavxd/libredesk/internal/team/models"
|
|
"github.com/lib/pq"
|
|
"github.com/volatiletech/null/v9"
|
|
)
|
|
|
|
const (
|
|
UserModel = "user"
|
|
|
|
SystemUserEmail = "System"
|
|
|
|
// User types
|
|
UserTypeAgent = "agent"
|
|
UserTypeContact = "contact"
|
|
|
|
// User availability statuses
|
|
Online = "online"
|
|
Offline = "offline"
|
|
Away = "away"
|
|
AwayManual = "away_manual"
|
|
AwayAndReassigning = "away_and_reassigning"
|
|
)
|
|
|
|
type User struct {
|
|
ID int `db:"id" json:"id"`
|
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
|
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
|
FirstName string `db:"first_name" json:"first_name"`
|
|
LastName string `db:"last_name" json:"last_name"`
|
|
Email null.String `db:"email" json:"email"`
|
|
Type string `db:"type" json:"type"`
|
|
AvailabilityStatus string `db:"availability_status" json:"availability_status"`
|
|
PhoneNumberCallingCode null.String `db:"phone_number_calling_code" json:"phone_number_calling_code"`
|
|
PhoneNumber null.String `db:"phone_number" json:"phone_number"`
|
|
AvatarURL null.String `db:"avatar_url" json:"avatar_url"`
|
|
Enabled bool `db:"enabled" json:"enabled"`
|
|
Password string `db:"password" json:"-"`
|
|
LastActiveAt null.Time `db:"last_active_at" json:"last_active_at"`
|
|
LastLoginAt null.Time `db:"last_login_at" json:"last_login_at"`
|
|
Roles pq.StringArray `db:"roles" json:"roles"`
|
|
Permissions pq.StringArray `db:"permissions" json:"permissions"`
|
|
Meta pq.StringArray `db:"meta" json:"meta"`
|
|
CustomAttributes json.RawMessage `db:"custom_attributes" json:"custom_attributes"`
|
|
Teams tmodels.Teams `db:"teams" json:"teams"`
|
|
ContactChannelID int `db:"contact_channel_id" json:"contact_channel_id,omitempty"`
|
|
NewPassword string `db:"-" json:"new_password,omitempty"`
|
|
SendWelcomeEmail bool `db:"-" json:"send_welcome_email,omitempty"`
|
|
InboxID int `json:"-"`
|
|
SourceChannel null.String `json:"-"`
|
|
SourceChannelID null.String `json:"-"`
|
|
|
|
Total int `json:"total,omitempty"`
|
|
}
|
|
|
|
type Note struct {
|
|
ID int `db:"id" json:"id"`
|
|
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
|
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
|
ContactID int `db:"contact_id" json:"contact_id"`
|
|
Note string `db:"note" json:"note"`
|
|
UserID int `db:"user_id" json:"user_id"`
|
|
FirstName string `db:"first_name" json:"first_name"`
|
|
LastName string `db:"last_name" json:"last_name"`
|
|
AvatarURL null.String `db:"avatar_url" json:"avatar_url"`
|
|
}
|
|
|
|
func (u *User) FullName() string {
|
|
return u.FirstName + " " + u.LastName
|
|
}
|
|
|
|
func (u *User) HasAdminRole() bool {
|
|
return slices.Contains(u.Roles, rmodels.RoleAdmin)
|
|
}
|