private static async Task <IActionResult> DeleteProposal(IBinder binder, InteractiveMessagePayload payload, Proposal proposal) { var proposals = await binder.GetTable("proposals"); if (proposal != null) { // Bloquer la suppression d'une proposition plannifiée if (!string.IsNullOrWhiteSpace(proposal.PlannedIn)) { var plan = await binder.GetTableRow <Plan>("plans", payload.PartitionKey, proposal.PlannedIn); if (plan != null) { return(Utils.Ok(new SlackMessage { Text = $"Ce vidéo est déjà planifié pour le {plan.Date:dddd d MMMM}.", Attachments = { MessageHelpers.GetRemoveMessageAttachment() } })); } } var result = await proposals.ExecuteAsync(TableOperation.Delete(proposal)); if (result.IsError()) { await MessageHelpers.PostErrorMessage(binder, payload); return(Utils.Ok()); } // Notifier le owner si c'est pas lui qui supprime sa proposition if (proposal.ProposedBy != payload.User.Id) { await SlackHelper.PostMessage(binder, payload.Team.Id, new PostMessageRequest { Channel = proposal.ProposedBy, Text = $"<@{payload.User.Id}> vient de supprimer votre proposition de vidéo dans <#{payload.Channel.Id}>:", Attachments = { await MessageHelpers.GetProposalAttachment(binder, proposal, allowActions: false) } }); } } // NOTE: Présentement la seule place qu'on peut supprimer une proposition c'est à partir de la liste de toutes les propositions. // Si ça change, va falloir ajouter plus de logique ici pour recréer le bon type de message. var allProposals = await ProposalHelpers.GetActiveProposals(proposals, payload.PartitionKey); var message = await MessageHelpers.GetListMessage(binder, allProposals, payload.Channel.Id); message.ReplaceOriginal = true; return(Utils.Ok(message)); }
public static async Task <IActionResult> OnList( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "slack/commands/list")] HttpRequest req, [Table("proposals")] CloudTable proposalsTable, IBinder binder, ExecutionContext context) { Utils.SetCulture(); var body = await SlackHelper.ReadSlackRequest(req, context); var parameters = SlackHelper.ParseBody(body); var team = parameters["team_id"]; var channel = parameters["channel_id"]; var allProposals = await ProposalHelpers.GetActiveProposals(proposalsTable, Utils.GetPartitionKey(team, channel)); var message = await MessageHelpers.GetListMessage(binder, allProposals, channel); return(Utils.Ok(message)); }