this repo has no description
1<?php
2
3namespace App\Models;
4
5// use Illuminate\Contracts\Auth\MustVerifyEmail;
6use Illuminate\Database\Eloquent\Factories\HasFactory;
7use Illuminate\Foundation\Auth\User as Authenticatable;
8use Illuminate\Notifications\Notifiable;
9use Laravel\Sanctum\HasApiTokens;
10
11/**
12 * @property int $id
13 * @property string $name
14 * @property string $email
15 * @property \Illuminate\Support\Carbon|null $email_verified_at
16 * @property string $password
17 * @property string|null $remember_token
18 * @property \Illuminate\Support\Carbon|null $created_at
19 * @property \Illuminate\Support\Carbon|null $updated_at
20 * @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
21 * @property-read int|null $notifications_count
22 * @method static \Database\Factories\UserFactory factory($count = null, $state = [])
23 * @method static \Illuminate\Database\Eloquent\Builder<static>|User newModelQuery()
24 * @method static \Illuminate\Database\Eloquent\Builder<static>|User newQuery()
25 * @method static \Illuminate\Database\Eloquent\Builder<static>|User query()
26 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereCreatedAt($value)
27 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereEmail($value)
28 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereEmailVerifiedAt($value)
29 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereId($value)
30 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereName($value)
31 * @method static \Illuminate\Database\Eloquent\Builder<static>|User wherePassword($value)
32 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereRememberToken($value)
33 * @method static \Illuminate\Database\Eloquent\Builder<static>|User whereUpdatedAt($value)
34 * @mixin \Eloquent
35 */
36class User extends Authenticatable
37{
38 /** @use HasFactory<\Database\Factories\UserFactory> */
39 use HasFactory, Notifiable, HasApiTokens;
40
41 /**
42 * The attributes that are mass assignable.
43 *
44 * @var list<string>
45 */
46 protected $fillable = ["firstname", "lastname", "pin", "email", "password"];
47
48 /**
49 * The attributes that should be hidden for serialization.
50 *
51 * @var list<string>
52 */
53 protected $hidden = ["password", "remember_token"];
54
55 /**
56 * Get the attributes that should be cast.
57 *
58 * @return array<string, string>
59 */
60 protected function casts(): array
61 {
62 return [
63 "email_verified_at" => "datetime",
64 "password" => "hashed",
65 ];
66 }
67
68 public function userAccounts()
69 {
70 return $this->hasMany(UserAccount::class);
71 }
72
73 public function userInstitutionKeys()
74 {
75 return $this->hasMany(UserInstitutionKey::class);
76 }
77
78 public function mappedUserInstitutionKeys()
79 {
80 $rawInstitutionKeys = $this->userInstitutionKeys()->with('institution')->get();
81
82 $keys = [];
83 foreach ($rawInstitutionKeys as $key) {
84 if (!isset($keys[$key->institution->slug])) {
85 $keys[$key->institution->slug] = [];
86 }
87 if (!isset($keys[$key->institution->slug][$key->institution->type])) {
88 $keys[$key->institution->slug][$key->institution->type] = [];
89 }
90 $keys[$key->institution->slug][$key->institution->type][$key->institution->country_code] = $key;
91 }
92
93 return $keys;
94 }
95
96 public function getKeyForInstitution(Institution $institution)
97 {
98 return $this->userInstitutionKeys()
99 ->where("institution_id", $institution->id)
100 ->first();
101 }
102
103 public function accounts()
104 {
105 return $this->belongsToMany(
106 Account::class,
107 "user_accounts",
108 )->withTimestamps();
109 }
110}