MCPcopy Create free account
hub / github.com/dfinity/orbit / create_request

Method create_request

core/station/impl/src/services/request.rs:324–363  ·  view source on GitHub ↗

Creates a new request adding the caller user as the requester. By default, the request has an expiration date of 7 days from the creation date.

(
        &self,
        input: CreateRequestInput,
        ctx: &CallContext,
    )

Source from the content-addressed store, hash-verified

322 ///
323 /// By default, the request has an expiration date of 7 days from the creation date.
324 pub async fn create_request(
325 &self,
326 input: CreateRequestInput,
327 ctx: &CallContext,
328 ) -> ServiceResult<Request> {
329 let requester = self.user_service.get_user_by_identity(&ctx.caller())?;
330 let mut request = RequestFactory::create_request(requester.id, input).await?;
331
332 // Different request types may have different validation rules.
333 request.validate()?;
334
335 // Insert the request into the repository before adding approvals so checks that depend on the
336 // request being in the repository pass.
337 self.request_repository
338 .insert(request.to_key(), request.to_owned());
339
340 if request.can_approve(&requester.id) {
341 request.add_approval(requester.id, RequestApprovalStatus::Approved, None)?;
342 }
343
344 // When a request is created, it is immediately evaluated to determine its status.
345 // This is done because the request may be immediately rejected or approved based on the policies.
346 let maybe_evaluation = request.reevaluate().await?;
347
348 self.request_repository
349 .insert(request.to_key(), request.to_owned());
350
351 if let Some(evaluation) = maybe_evaluation {
352 self.evaluation_result_repository
353 .insert(request.id, evaluation);
354 }
355
356 if request.status == RequestStatus::Created {
357 self.created_request_hook(&request).await;
358 } else if request.status == RequestStatus::Rejected {
359 self.rejected_request_hook(&request).await;
360 }
361
362 Ok(request)
363 }
364
365 async fn rejected_request_hook(&self, request: &Request) {
366 self.notification_service

Callers 15

removeUserGroupMethod · 0.45
addUserGroupMethod · 0.45
editUserGroupMethod · 0.45
addUserMethod · 0.45
editUserMethod · 0.45
fundExternalCanisterMethod · 0.45

Calls 11

create_requestFunction · 0.85
can_approveMethod · 0.80
add_approvalMethod · 0.80
reevaluateMethod · 0.80
created_request_hookMethod · 0.80
rejected_request_hookMethod · 0.80
get_user_by_identityMethod · 0.45
callerMethod · 0.45
validateMethod · 0.45
insertMethod · 0.45
to_keyMethod · 0.45

Tested by 1