1
2
3
4
5
6
7 package ch.colabproject.colab.api.rest.card;
8
9 import ch.colabproject.colab.api.controller.card.CardManager;
10 import ch.colabproject.colab.api.controller.card.grid.GridPosition;
11 import ch.colabproject.colab.api.exceptions.ColabMergeException;
12 import ch.colabproject.colab.api.model.card.Card;
13 import ch.colabproject.colab.api.model.card.CardContent;
14 import ch.colabproject.colab.api.model.link.ActivityFlowLink;
15 import ch.colabproject.colab.api.model.link.StickyNoteLink;
16 import ch.colabproject.colab.api.model.team.acl.Assignment;
17 import ch.colabproject.colab.api.persistence.jpa.card.CardDao;
18 import ch.colabproject.colab.generator.model.annotations.AuthenticationRequired;
19 import ch.colabproject.colab.generator.model.exceptions.HttpErrorMessage;
20 import java.util.List;
21 import jakarta.inject.Inject;
22 import jakarta.ws.rs.Consumes;
23 import jakarta.ws.rs.GET;
24 import jakarta.ws.rs.POST;
25 import jakarta.ws.rs.PUT;
26 import jakarta.ws.rs.Path;
27 import jakarta.ws.rs.PathParam;
28 import jakarta.ws.rs.Produces;
29 import jakarta.ws.rs.core.MediaType;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33
34
35
36
37
38
39 @Path("cards")
40 @Consumes(MediaType.APPLICATION_JSON)
41 @Produces(MediaType.APPLICATION_JSON)
42 @AuthenticationRequired
43 public class CardRestEndpoint {
44
45
46 private static final Logger logger = LoggerFactory.getLogger(CardRestEndpoint.class);
47
48
49
50
51 @Inject
52 private CardDao cardDao;
53
54
55
56
57 @Inject
58 private CardManager cardManager;
59
60
61
62
63
64
65
66
67 @GET
68 @Path("{id: [0-9]+}")
69 public Card getCard(@PathParam("id") Long id) {
70 logger.debug("get card #{}", id);
71 return cardDao.findCard(id);
72 }
73
74
75
76
77
78
79
80
81 @POST
82 @Path("create/{parentId: [0-9]+}")
83 public Card createNewCardWithoutType(@PathParam("parentId") Long parentId) {
84 logger.debug("create a new card for the parent #{} without type", parentId);
85 return cardManager.createNewCard(parentId, null);
86 }
87
88
89
90
91
92
93
94
95
96 @POST
97 @Path("create/{parentId: [0-9]+}/{cardTypeId: [0-9]+}")
98 public Card createNewCard(@PathParam("parentId") Long parentId,
99 @PathParam("cardTypeId") Long cardTypeId) {
100 logger.debug("create a new card for the parent #{} and the type #{}", parentId,
101 cardTypeId);
102 return cardManager.createNewCard(parentId, cardTypeId);
103 }
104
105
106
107
108
109
110
111
112
113 @PUT
114 public void updateCard(Card card) throws ColabMergeException {
115 logger.debug("update card {}", card);
116 cardDao.updateCard(card);
117 }
118
119
120
121
122
123
124
125
126
127 @PUT
128 @Path("{cardId: [0-9]+}/changePosition")
129 public void changeCardPosition(@PathParam("cardId") Long cardId, GridPosition position) {
130 cardManager.changeCardPosition(cardId, position);
131 }
132
133
134
135
136
137
138
139
140
141
142 @PUT
143 @Path("{cardId: [0-9]+}/MoveTo/{newParentId: [0-9]+}")
144 public void moveCard(
145 @PathParam("cardId") Long cardId,
146 @PathParam("newParentId") Long newParentId) {
147 cardManager.moveCard(cardId, newParentId);
148 }
149
150
151
152
153
154
155
156
157 @PUT
158 @Path("{cardId: [0-9]+}/MoveAbove")
159 public void moveCardAbove(@PathParam("cardId") Long cardId) {
160 cardManager.moveCardAbove(cardId);
161 }
162
163
164
165
166
167
168
169
170
171 @PUT
172 @Path("{cardId: [0-9]+}/PutInBin")
173 public void putCardInBin(@PathParam("cardId") Long cardId) {
174 logger.debug("put in bin card #{}", cardId);
175 cardManager.putCardInBin(cardId);
176 }
177
178
179
180
181
182
183
184
185
186
187
188
189
190 @PUT
191 @Path("{cardId: [0-9]+}/RestoreFromBin")
192 public void restoreCardFromBin(@PathParam("cardId") Long cardId) {
193 logger.debug("restore from bin card #{}", cardId);
194 cardManager.restoreCardFromBin(cardId);
195 }
196
197
198
199
200
201
202
203
204
205
206 @PUT
207 @Path("{cardId: [0-9]+}/FlagAsToDeleteForever")
208 public void flagCardAsToDeleteForever(@PathParam("cardId") Long cardId) {
209 logger.debug("flag card #{} as to delete forever", cardId);
210 cardManager.flagCardAsToDeleteForever(cardId);
211 }
212
213
214
215
216
217
218
219
220 @GET
221 @Path("{id: [0-9]+}/CardContents")
222 public List<CardContent> getContentVariantsOfCard(@PathParam("id") Long cardId) {
223 logger.debug("Get card #{} content variants", cardId);
224 return cardManager.getContentVariants(cardId);
225 }
226
227
228
229
230
231
232
233
234 @GET
235 @Path("{id: [0-9]+}/StickyNoteLinksDestinationCard")
236 public List<StickyNoteLink> getStickyNoteLinksAsDest(@PathParam("id") Long cardId) {
237 logger.debug("Get sticky note links to card #{} as destination", cardId);
238 return cardManager.getStickyNoteLinkAsDest(cardId);
239 }
240
241
242
243
244
245
246
247
248 @GET
249 @Path("{id: [0-9]+}/StickyNoteLinksSrcCard")
250 public List<StickyNoteLink> getStickyNoteLinksAsSrc(@PathParam("id") Long cardId) {
251 logger.debug("Get sticky note links to card #{} as source", cardId);
252 return cardManager.getStickyNoteLinkAsSrcCard(cardId);
253 }
254
255
256
257
258
259
260
261
262 @GET
263 @Path("{id: [0-9]+}/ActivityFlowLinksPreviousCard")
264 public List<ActivityFlowLink> getActivityFlowLinksAsPrevious(@PathParam("id") Long cardId) {
265 logger.debug("Get activity flow links to card #{} as previous", cardId);
266 return cardManager.getActivityFlowLinkAsPrevious(cardId);
267 }
268
269
270
271
272
273
274
275
276 @GET
277 @Path("{id: [0-9]+}/ActivityFlowLinksNextCard")
278 public List<ActivityFlowLink> getActivityFlowLinksAsNext(@PathParam("id") Long cardId) {
279 logger.debug("Get activity flow links to card #{} as next", cardId);
280 return cardManager.getActivityFlowLinkAsNext(cardId);
281 }
282
283
284
285
286
287
288
289
290 @GET
291 @Path("{cardId: [0-9]+}/assignments")
292 public List<Assignment> getAssignments(@PathParam("cardId") Long cardId) {
293 logger.debug("Get Card #{} assignments list", cardId);
294 return cardManager.getAssignments(cardId);
295 }
296
297
298
299
300 @POST
301 @Path("createCardType/{cardId: [0-9]+}")
302 public void createCardType(@PathParam("cardId") Long cardId) {
303
304 cardManager.createCardType(cardId);
305 }
306
307
308
309
310
311
312
313
314 @POST
315 @Path("removeCardType/{cardId: [0-9]+}")
316 public void removeCardType(@PathParam("cardId") Long cardId) {
317
318 cardManager.removeCardType(cardId);
319 }
320 }