microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
kavin/conversation-fix

Branches

Tags

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

Clone

HTTPS

Download ZIP

core/src/Microsoft.Teams.Bot.Apps/Schema/Invokes/MessageExtensionActionResponse.cs

94lines · modecode

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