• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

klinge / sl-webapp / 18972011891

31 Oct 2025 12:06PM UTC coverage: 74.73% (+11.1%) from 63.602%
18972011891

push

github

klinge
Fixed phpcs errors

1662 of 2224 relevant lines covered (74.73%)

3.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.24
/App/Models/SeglingRepository.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace App\Models;
6

7
use PDO;
8
use Psr\Log\LoggerInterface;
9

10
class SeglingRepository extends BaseModel
11
{
12
    public function __construct(PDO $db, LoggerInterface $logger)
13
    {
14
        parent::__construct($db, $logger);
16✔
15
    }
16

17
    public function getAll(): array
18
    {
19
        $query = "SELECT * FROM Segling ORDER BY startdatum DESC";
1✔
20
        $stmt = $this->conn->prepare($query);
1✔
21
        $stmt->execute();
1✔
22
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
1✔
23

24
        $seglingar = [];
1✔
25
        foreach ($results as $row) {
1✔
26
            $seglingar[] = $this->mapRowToSegling($row);
1✔
27
        }
28
        return $seglingar;
1✔
29
    }
30

31
    public function getAllWithDeltagare(): array
32
    {
33
        $seglingar = $this->getAll();
×
34
        foreach ($seglingar as $segling) {
×
35
            $segling->deltagare = $this->getDeltagare($segling->id);
×
36
        }
37
        return $seglingar;
×
38
    }
39

40
    public function getById(int $id): ?Segling
41
    {
42
        $query = "SELECT * FROM Segling WHERE id = ?";
3✔
43
        $stmt = $this->conn->prepare($query);
3✔
44
        $stmt->bindParam(1, $id, PDO::PARAM_INT);
3✔
45
        $stmt->execute();
3✔
46
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
3✔
47

48
        return $row ? $this->mapRowToSegling($row) : null;
3✔
49
    }
50

51
    public function getByIdWithDeltagare(int $id): ?Segling
52
    {
53
        $segling = $this->getById($id);
1✔
54
        if ($segling) {
1✔
55
            $segling->deltagare = $this->getDeltagare($id);
1✔
56
        }
57
        return $segling;
1✔
58
    }
59

60
    public function create(array $data): ?int
61
    {
62
        $query = 'INSERT INTO Segling (startdatum, slutdatum, skeppslag, kommentar) VALUES (:startdat, :slutdat, :skeppslag, :kommentar)';
3✔
63
        $stmt = $this->conn->prepare($query);
3✔
64
        $stmt->bindParam(':startdat', $data['startdat'], PDO::PARAM_STR);
3✔
65
        $stmt->bindParam(':slutdat', $data['slutdat'], PDO::PARAM_STR);
3✔
66
        $stmt->bindParam(':skeppslag', $data['skeppslag'], PDO::PARAM_STR);
3✔
67
        $stmt->bindValue(':kommentar', $data['kommentar'] ?? null, PDO::PARAM_STR);
3✔
68

69
        if ($stmt->execute() && $stmt->rowCount() === 1) {
3✔
70
            return (int) $this->conn->lastInsertId();
2✔
71
        }
72
        return null;
1✔
73
    }
74

75
    public function update(int $id, array $data): bool
76
    {
77
        $query = "UPDATE Segling SET 
3✔
78
            startdatum = :startdatum, 
79
            slutdatum = :slutdatum, 
80
            skeppslag = :skeppslag, 
81
            kommentar = :kommentar
82
            WHERE id = :id";
3✔
83

84
        $stmt = $this->conn->prepare($query);
3✔
85
        $stmt->bindParam(':startdatum', $data['startdat'], PDO::PARAM_STR);
3✔
86
        $stmt->bindParam(':slutdatum', $data['slutdat'], PDO::PARAM_STR);
3✔
87
        $stmt->bindParam(':skeppslag', $data['skeppslag'], PDO::PARAM_STR);
3✔
88
        $stmt->bindValue(':kommentar', $data['kommentar'] ?? null, PDO::PARAM_STR);
3✔
89
        $stmt->bindParam(':id', $id, PDO::PARAM_INT);
3✔
90

91
        return $stmt->execute() && $stmt->rowCount() === 1;
3✔
92
    }
93

94
    public function delete(int $id): bool
95
    {
96
        $query = "DELETE FROM Segling WHERE id = ?";
3✔
97
        $stmt = $this->conn->prepare($query);
3✔
98
        $stmt->bindParam(1, $id, PDO::PARAM_INT);
3✔
99
        return $stmt->execute() && $stmt->rowCount() === 1;
3✔
100
    }
101

102
    public function getDeltagare(int $seglingId): array
103
    {
104
        $query = "SELECT smr.medlem_id, m.fornamn, m.efternamn, smr.roll_id, r.roll_namn
2✔
105
                    FROM Segling_Medlem_Roll smr
106
                    JOIN Medlem m ON smr.medlem_id = m.id
107
                    LEFT JOIN Roll r ON smr.roll_id = r.id
108
                    WHERE smr.segling_id = :id";
2✔
109
        $stmt = $this->conn->prepare($query);
2✔
110
        $stmt->bindParam(':id', $seglingId, PDO::PARAM_INT);
2✔
111
        $stmt->execute();
2✔
112
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
2✔
113
    }
114

115
    public function isMemberOnSegling(int $seglingId, int $memberId): bool
116
    {
117
        $query = "SELECT COUNT(*) FROM Segling_Medlem_Roll WHERE segling_id = :segling_id AND medlem_id = :medlem_id";
1✔
118
        $stmt = $this->conn->prepare($query);
1✔
119
        $stmt->bindParam(':segling_id', $seglingId, PDO::PARAM_INT);
1✔
120
        $stmt->bindParam(':medlem_id', $memberId, PDO::PARAM_INT);
1✔
121
        $stmt->execute();
1✔
122
        return $stmt->fetchColumn() > 0;
1✔
123
    }
124

125
    public function addMemberToSegling(int $seglingId, int $memberId, ?int $roleId = null): bool
126
    {
127
        if ($roleId && $roleId !== 999) {
2✔
128
            $query = "INSERT INTO Segling_Medlem_Roll (segling_id, medlem_id, roll_id) VALUES (:segling_id, :medlem_id, :roll_id)";
1✔
129
        } else {
130
            $query = "INSERT INTO Segling_Medlem_Roll (segling_id, medlem_id) VALUES (:segling_id, :medlem_id)";
1✔
131
        }
132

133
        $stmt = $this->conn->prepare($query);
2✔
134
        $stmt->bindParam(':segling_id', $seglingId, PDO::PARAM_INT);
2✔
135
        $stmt->bindParam(':medlem_id', $memberId, PDO::PARAM_INT);
2✔
136
        if ($roleId && $roleId !== 999) {
2✔
137
            $stmt->bindParam(':roll_id', $roleId, PDO::PARAM_INT);
1✔
138
        }
139

140
        return $stmt->execute() && $stmt->rowCount() === 1;
2✔
141
    }
142

143
    public function removeMemberFromSegling(int $seglingId, int $memberId): bool
144
    {
145
        $query = "DELETE FROM Segling_Medlem_Roll WHERE segling_id = :segling_id AND medlem_id = :medlem_id";
1✔
146
        $stmt = $this->conn->prepare($query);
1✔
147
        $stmt->bindParam(':segling_id', $seglingId, PDO::PARAM_INT);
1✔
148
        $stmt->bindParam(':medlem_id', $memberId, PDO::PARAM_INT);
1✔
149
        return $stmt->execute();
1✔
150
    }
151

152
    private function mapRowToSegling(array $row): Segling
153
    {
154
        return new Segling(
3✔
155
            id: (int) $row['id'],
3✔
156
            start_dat: $row['startdatum'],
3✔
157
            slut_dat: $row['slutdatum'],
3✔
158
            skeppslag: $row['skeppslag'],
3✔
159
            kommentar: $row['kommentar'],
3✔
160
            deltagare: [],
3✔
161
            created_at: $row['created_at'],
3✔
162
            updated_at: $row['updated_at']
3✔
163
        );
3✔
164
    }
165

166
    // Legacy methods for backward compatibility
167
    public function createSegling(array $data): ?int
168
    {
169
        return $this->create($data);
1✔
170
    }
171

172
    public function updateSegling(int $id, array $data): bool
173
    {
174
        return $this->update($id, $data);
1✔
175
    }
176

177
    public function deleteSegling(int $id): bool
178
    {
179
        return $this->delete($id);
1✔
180
    }
181
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc