@@ -27,36 +27,23 @@ class TreeVersioningApiController @Inject()(
2727 // Request/Response DTOs
2828 // ============================================================================
2929
30- case class StartReviewRequest (curatorId : String )
31- object StartReviewRequest {
32- implicit val format : OFormat [StartReviewRequest ] = Json .format[StartReviewRequest ]
33- }
34-
35- case class ApplyChangeSetRequest (curatorId : String )
36- object ApplyChangeSetRequest {
37- implicit val format : OFormat [ApplyChangeSetRequest ] = Json .format[ApplyChangeSetRequest ]
38- }
30+ // Audit identity for API-key-authenticated actions
31+ private val ApiCuratorId = " api-system"
3932
40- case class DiscardChangeSetRequest (curatorId : String , reason : String )
33+ case class DiscardChangeSetRequest (reason : String )
4134 object DiscardChangeSetRequest {
4235 implicit val format : OFormat [DiscardChangeSetRequest ] = Json .format[DiscardChangeSetRequest ]
4336 }
4437
4538 case class ReviewChangeRequest (
46- curatorId : String ,
4739 action : String , // "APPLIED", "SKIPPED", "REVERTED"
4840 notes : Option [String ] = None
4941 )
5042 object ReviewChangeRequest {
5143 implicit val format : OFormat [ReviewChangeRequest ] = Json .format[ReviewChangeRequest ]
5244 }
5345
54- case class ApproveAllRequest (curatorId : String )
55- object ApproveAllRequest {
56- implicit val format : OFormat [ApproveAllRequest ] = Json .format[ApproveAllRequest ]
57- }
58-
59- case class AddCommentRequest (author : String , content : String , treeChangeId : Option [Int ] = None )
46+ case class AddCommentRequest (content : String , treeChangeId : Option [Int ] = None )
6047 object AddCommentRequest {
6148 implicit val format : OFormat [AddCommentRequest ] = Json .format[AddCommentRequest ]
6249 }
@@ -112,9 +99,9 @@ class TreeVersioningApiController @Inject()(
11299 * Start review of a change set.
113100 * POST /api/v1/manage/change-sets/:id/start-review
114101 */
115- def startReview (id : Int ): Action [StartReviewRequest ] =
116- secureApi.jsonAction[ StartReviewRequest ]. async { request =>
117- treeVersioningService.startReview(id, request.body.curatorId ).map { success =>
102+ def startReview (id : Int ): Action [AnyContent ] =
103+ secureApi.async { request =>
104+ treeVersioningService.startReview(id, ApiCuratorId ).map { success =>
118105 if (success) {
119106 Ok (Json .obj(" success" -> true , " message" -> s " Review started for change set $id" ))
120107 } else {
@@ -135,9 +122,9 @@ class TreeVersioningApiController @Inject()(
135122 * Apply a change set to Production.
136123 * POST /api/v1/manage/change-sets/:id/apply
137124 */
138- def applyChangeSet (id : Int ): Action [ApplyChangeSetRequest ] =
139- secureApi.jsonAction[ ApplyChangeSetRequest ]. async { request =>
140- treeVersioningService.applyChangeSet(id, request.body.curatorId ).map { success =>
125+ def applyChangeSet (id : Int ): Action [AnyContent ] =
126+ secureApi.async { request =>
127+ treeVersioningService.applyChangeSet(id, ApiCuratorId ).map { success =>
141128 if (success) {
142129 Ok (Json .obj(" success" -> true , " message" -> s " Change set $id applied to Production " ))
143130 } else {
@@ -161,7 +148,7 @@ class TreeVersioningApiController @Inject()(
161148 def discardChangeSet (id : Int ): Action [DiscardChangeSetRequest ] =
162149 secureApi.jsonAction[DiscardChangeSetRequest ].async { request =>
163150 val req = request.body
164- treeVersioningService.discardChangeSet(id, req.curatorId , req.reason).map { success =>
151+ treeVersioningService.discardChangeSet(id, ApiCuratorId , req.reason).map { success =>
165152 if (success) {
166153 Ok (Json .obj(" success" -> true , " message" -> s " Change set $id discarded " ))
167154 } else {
@@ -211,7 +198,7 @@ class TreeVersioningApiController @Inject()(
211198 case None =>
212199 Future .successful(BadRequest (Json .obj(" error" -> s " Invalid action: ${req.action}" )))
213200 case Some (action) =>
214- treeVersioningService.reviewChange(changeId, req.curatorId , action, req.notes).map { success =>
201+ treeVersioningService.reviewChange(changeId, ApiCuratorId , action, req.notes).map { success =>
215202 if (success) {
216203 Ok (Json .obj(" success" -> true , " message" -> s " Change $changeId reviewed as ${req.action}" ))
217204 } else {
@@ -231,9 +218,9 @@ class TreeVersioningApiController @Inject()(
231218 * Approve all pending changes in a change set.
232219 * POST /api/v1/manage/change-sets/:id/approve-all
233220 */
234- def approveAllPending (id : Int ): Action [ApproveAllRequest ] =
235- secureApi.jsonAction[ ApproveAllRequest ]. async { request =>
236- treeVersioningService.approveAllPending(id, request.body.curatorId ).map { count =>
221+ def approveAllPending (id : Int ): Action [AnyContent ] =
222+ secureApi.async { request =>
223+ treeVersioningService.approveAllPending(id, ApiCuratorId ).map { count =>
237224 Ok (Json .obj(" success" -> true , " approvedCount" -> count))
238225 }.recover {
239226 case e : Exception =>
@@ -253,7 +240,7 @@ class TreeVersioningApiController @Inject()(
253240 def addComment (id : Int ): Action [AddCommentRequest ] =
254241 secureApi.jsonAction[AddCommentRequest ].async { request =>
255242 val req = request.body
256- treeVersioningService.addComment(id, req.author , req.content, req.treeChangeId).map { commentId =>
243+ treeVersioningService.addComment(id, ApiCuratorId , req.content, req.treeChangeId).map { commentId =>
257244 Created (Json .obj(" success" -> true , " commentId" -> commentId))
258245 }.recover {
259246 case e : Exception =>
0 commit comments