add tests batch 20
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use App\Models\BaseModel;
|
||||
|
||||
class WhatsappGroupMembership extends BaseModel
|
||||
{
|
||||
@@ -20,17 +21,16 @@ class WhatsappGroupMembership extends BaseModel
|
||||
'verified_by',
|
||||
'verified_at',
|
||||
];
|
||||
|
||||
public $timestamps = true; // created_at, updated_at
|
||||
|
||||
protected $casts = [
|
||||
'class_section_id' => 'integer',
|
||||
'subject_id' => 'integer',
|
||||
'is_member' => 'boolean',
|
||||
'verified_by' => 'integer',
|
||||
'verified_at' => 'datetime',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime',
|
||||
'subject_id' => 'integer',
|
||||
'is_member' => 'boolean',
|
||||
'verified_by' => 'integer',
|
||||
'verified_at' => 'datetime',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime',
|
||||
];
|
||||
|
||||
/* ============================================================
|
||||
@@ -38,8 +38,7 @@ class WhatsappGroupMembership extends BaseModel
|
||||
* ============================================================
|
||||
*/
|
||||
public const TYPE_PRIMARY = 'primary';
|
||||
|
||||
public const TYPE_SECOND = 'second';
|
||||
public const TYPE_SECOND = 'second';
|
||||
|
||||
public static function normType(string $type): string
|
||||
{
|
||||
@@ -54,7 +53,6 @@ class WhatsappGroupMembership extends BaseModel
|
||||
public function scopeForSections(Builder $q, array $sectionIds): Builder
|
||||
{
|
||||
$ids = array_values(array_unique(array_filter(array_map('intval', $sectionIds))));
|
||||
|
||||
return empty($ids) ? $q->whereRaw('1=0') : $q->whereIn('class_section_id', $ids);
|
||||
}
|
||||
|
||||
@@ -66,14 +64,13 @@ class WhatsappGroupMembership extends BaseModel
|
||||
public function scopeForSemester(Builder $q, string $sem): Builder
|
||||
{
|
||||
$sem = trim($sem);
|
||||
|
||||
return $sem === '' ? $q : $q->where('semester', $sem);
|
||||
}
|
||||
|
||||
public function scopeForSubject(Builder $q, string $type, int $subjectId): Builder
|
||||
{
|
||||
return $q->where('subject_type', static::normType($type))
|
||||
->where('subject_id', $subjectId);
|
||||
->where('subject_id', $subjectId);
|
||||
}
|
||||
|
||||
/* ============================================================
|
||||
@@ -88,12 +85,10 @@ class WhatsappGroupMembership extends BaseModel
|
||||
public static function getBySectionsAndTerm(array $sectionIds, string $year, string $sem): array
|
||||
{
|
||||
$ids = array_values(array_unique(array_filter(array_map('intval', $sectionIds))));
|
||||
if (empty($ids)) {
|
||||
return [];
|
||||
}
|
||||
if (empty($ids)) return [];
|
||||
|
||||
$year = trim($year);
|
||||
$sem = trim($sem);
|
||||
$sem = trim($sem);
|
||||
|
||||
$q = static::query()
|
||||
->forSections($ids)
|
||||
@@ -110,8 +105,8 @@ class WhatsappGroupMembership extends BaseModel
|
||||
|
||||
$out = [];
|
||||
foreach ($rows as $m) {
|
||||
$k = sprintf('%d:%s:%d', (int) $m->class_section_id, (string) $m->subject_type, (int) $m->subject_id);
|
||||
if (! isset($out[$k])) {
|
||||
$k = sprintf('%d:%s:%d', (int)$m->class_section_id, (string)$m->subject_type, (int)$m->subject_id);
|
||||
if (!isset($out[$k])) {
|
||||
$out[$k] = $m->toArray();
|
||||
}
|
||||
}
|
||||
@@ -139,15 +134,15 @@ class WhatsappGroupMembership extends BaseModel
|
||||
): int {
|
||||
$type = static::normType($type);
|
||||
$year = trim($year);
|
||||
$sem = trim($sem);
|
||||
$sem = trim($sem);
|
||||
|
||||
$payload = [
|
||||
'class_section_id' => $classSectionId,
|
||||
'school_year' => $year,
|
||||
'semester' => $sem,
|
||||
'subject_type' => $type,
|
||||
'subject_id' => $subjectId,
|
||||
'is_member' => $isMember ? 1 : 0,
|
||||
'school_year' => $year,
|
||||
'semester' => $sem,
|
||||
'subject_type' => $type,
|
||||
'subject_id' => $subjectId,
|
||||
'is_member' => $isMember ? 1 : 0,
|
||||
];
|
||||
|
||||
if ($verifiedBy) {
|
||||
@@ -160,14 +155,13 @@ class WhatsappGroupMembership extends BaseModel
|
||||
$row = static::query()->updateOrCreate(
|
||||
[
|
||||
'class_section_id' => $classSectionId,
|
||||
'school_year' => $year,
|
||||
'semester' => $sem,
|
||||
'subject_type' => $type,
|
||||
'subject_id' => $subjectId,
|
||||
'school_year' => $year,
|
||||
'semester' => $sem,
|
||||
'subject_type' => $type,
|
||||
'subject_id' => $subjectId,
|
||||
],
|
||||
$payload
|
||||
);
|
||||
|
||||
return (int) $row->id;
|
||||
}
|
||||
|
||||
@@ -183,7 +177,7 @@ class WhatsappGroupMembership extends BaseModel
|
||||
|
||||
if ($existing) {
|
||||
// Keep semester from the existing row if present (legacy behavior).
|
||||
if (! empty($existing->semester)) {
|
||||
if (!empty($existing->semester)) {
|
||||
$payload['semester'] = (string) $existing->semester;
|
||||
}
|
||||
|
||||
@@ -195,7 +189,6 @@ class WhatsappGroupMembership extends BaseModel
|
||||
|
||||
// No existing row => create a new one (semester remains blank)
|
||||
$created = static::query()->create($payload);
|
||||
|
||||
return (int) $created->id;
|
||||
}
|
||||
|
||||
@@ -210,13 +203,13 @@ class WhatsappGroupMembership extends BaseModel
|
||||
|
||||
return [
|
||||
'class_section_id' => [$req, 'integer', 'min:1'],
|
||||
'school_year' => [$req, 'string', 'max:20'],
|
||||
'semester' => ['nullable', 'string', 'max:20'],
|
||||
'subject_type' => [$req, 'string', 'in:'.implode(',', [self::TYPE_PRIMARY, self::TYPE_SECOND])],
|
||||
'subject_id' => [$req, 'integer', 'min:1'],
|
||||
'is_member' => ['nullable', 'boolean'],
|
||||
'verified_by' => ['nullable', 'integer'],
|
||||
'verified_at' => ['nullable', 'date'],
|
||||
'school_year' => [$req, 'string', 'max:20'],
|
||||
'semester' => ['nullable', 'string', 'max:20'],
|
||||
'subject_type' => [$req, 'string', 'in:' . implode(',', [self::TYPE_PRIMARY, self::TYPE_SECOND])],
|
||||
'subject_id' => [$req, 'integer', 'min:1'],
|
||||
'is_member' => ['nullable', 'boolean'],
|
||||
'verified_by' => ['nullable', 'integer'],
|
||||
'verified_at' => ['nullable', 'date'],
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user