microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
samples/migration-bot

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

core/src/Microsoft.Teams.Bot.Apps/Handlers/MessageExtension/MessageExtensionActionResponse.cs

95lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using System.Text.Json.Serialization;
5using Microsoft.Teams.Bot.Apps.Handlers.TaskModules;
6
7namespace Microsoft.Teams.Bot.Apps.Handlers.MessageExtension;
8
9/// <summary>
10/// Represents a response from a message extension action that can contain either a task module or compose extension response.
11/// </summary>
12public class MessageExtensionActionResponse
13{
14 /// <summary>
15 /// The task module result.
16 /// </summary>
17 [JsonPropertyName("task")]
18 [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
19 public Response? Task { get; set; }
20
21 /// <summary>
22 /// The compose extension result (for message extension results, auth, config, etc.).
23 /// </summary>
24 [JsonPropertyName("composeExtension")]
25 [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
26 public ComposeExtension? ComposeExtension { get; set; }
27
28 /// <summary>
29 /// Creates a new builder for MessageExtensionActionResponse.
30 /// </summary>
31 public static MessageExtensionActionResponseBuilder CreateBuilder()
32 {
33 return new MessageExtensionActionResponseBuilder();
34 }
35}
36
37/// <summary>
38/// Builder for MessageExtensionActionResponse.
39/// </summary>
40public class MessageExtensionActionResponseBuilder
41{
42 private TaskModuleResponse? _taskResponse;
43 private MessageExtensionResponse? _extensionResponse;
44
45 /// <summary>
46 /// Sets the task module response using a TaskModuleResponseBuilder.
47 /// </summary>
48 public MessageExtensionActionResponseBuilder WithTask(TaskModuleResponseBuilder builder)
49 {
50 ArgumentNullException.ThrowIfNull(builder);
51 _taskResponse = builder.Validate();
52 return this;
53 }
54
55 /// <summary>
56 /// Sets the compose extension response using a MessageExtensionResponseBuilder.
57 /// </summary>
58 public MessageExtensionActionResponseBuilder WithComposeExtension(MessageExtensionResponseBuilder builder)
59 {
60 ArgumentNullException.ThrowIfNull(builder);
61 _extensionResponse = builder.Validate();
62 return this;
63 }
64
65 /// <summary>
66 /// Validates and builds the MessageExtensionActionResponse.
67 /// </summary>
68 private MessageExtensionActionResponse Validate()
69 {
70 if (_taskResponse == null && _extensionResponse == null)
71 {
72 throw new InvalidOperationException("Either Task or ComposeExtension must be set. Use WithTask() or WithComposeExtension().");
73 }
74
75 if (_taskResponse != null && _extensionResponse != null)
76 {
77 throw new InvalidOperationException("Cannot set both Task and ComposeExtension. Use either WithTask() or WithComposeExtension(), not both.");
78 }
79
80 return new MessageExtensionActionResponse
81 {
82 Task = _taskResponse?.Task,
83 ComposeExtension = _extensionResponse?.ComposeExtension
84 };
85 }
86
87 /// <summary>
88 /// Builds the MessageExtensionActionResponse and wraps it in a InvokeResponse.
89 /// </summary>
90 /// <param name="statusCode">The HTTP status code (default: 200).</param>
91 public InvokeResponse<MessageExtensionActionResponse> Build(int statusCode = 200)
92 {
93 return new InvokeResponse<MessageExtensionActionResponse>(statusCode, Validate());
94 }
95}
96