I have used some time now on integrating with monday. And a lot of people here has been very helpful so want to give a little back. This is just POC code but can properly help some getting started with c#. I will start to extend it for production and return in some weeks with more functionality.
How to use the code
var boardId = "111";
var groupId = "topics";
var monday = new Monday(_config.MondayAPIKey);
var columnValues = new List<IMondayColumn>();
var systemObservationColumn = new LongTextColumn("long_text", "LongTextColumn text");
columnValues.Add(systemObservationColumn);
var actionColumn = new LongTextColumn("long_text1", "LongTextColumn text");
columnValues.Add(actionColumn);
var warningGivenToColumn = new PersonColumn("person", "13958870");
columnValues.Add(warningGivenToColumn);
var typeColumn = new DropDownColumn("dropdown", "Due date");
columnValues.Add(typeColumn);
var result = await monday.InsertItem(boardId, groupId, "Tester 2", columnValues);
The code:
public interface IMondayColumn
{
string GetJSON();
}
public class DropDownColumn : IMondayColumn
{
string _label;
string _columnName;
public DropDownColumn(string columnName, string label)
{
_columnName = columnName;
_label = label;
}
public string GetJSON()
{
return @"\\\"""+_columnName+@"\\\"":{\\\""labels\\\"":[\\\"""+_label+@"\\\""]}";
}
}
public class LongTextColumn : IMondayColumn
{
string _text;
string _columnName;
public LongTextColumn(string columnName, string text)
{
_columnName = columnName;
_text = text;
}
public string GetJSON()
{
return @"\\\"""+_columnName+@"\\\"": { \\\""text\\\"": \\\""" + _text+ @"\\\""}";
}
}
public class PersonColumn : IMondayColumn
{
string _userId;
string _columnName;
public PersonColumn(string columName, string userId)
{
_userId = userId;
_columnName = columName;
}
public string GetJSON()
{
return @"\\\"""+_columnName+@"\\\"":{\\\""personsAndTeams\\\"":[{\\\""id\\\"":"+_userId+@",\\\""kind\\\"":\\\""person\\\""}]}";
}
}
public class Monday
{
string _apiKey;
string MondayApiUrl = "https://api.monday.com/v2/";
public Monday(string apiKey)
{
_apiKey = apiKey;
}
public async Task<string> InsertItem(string boardId, string groupId, string itemName, List<IMondayColumn> columnValues)
{
var columnValuesStr = GetColumnValuesFronList(columnValues);
//var query = @"{""query"": ""mutation {create_item(board_id: 674077648, group_id:\""topics\"", item_name: \""adding works\"", column_values: \"" {\\\""long_text\\\"": { \\\""text\\\"": \\\""Sample text\\\""}} \"") {id} }"" }";
var query = @"{""query"": ""mutation {create_item(board_id: "+boardId+@", group_id:\"""+groupId+@"\"", item_name: \"""+itemName+@"\"", column_values: \"" {" + columnValuesStr + @"} \"") {id} }"" }";
return await Query(query);
}
string GetColumnValuesFronList(List<IMondayColumn> columnValues)
{
string columnValuesStr = string.Empty;
foreach(var column in columnValues)
{
columnValuesStr += column.GetJSON()+",";
}
columnValuesStr = columnValuesStr.Trim(',');
return columnValuesStr;
}
public async Task<string> Query(string query)
{
byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(query);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(MondayApiUrl);
request.ContentType = "application/json";
request.Method = "POST";
request.Headers.Add("Authorization", _apiKey);
using (Stream requestBody = request.GetRequestStream())
{
await requestBody.WriteAsync(dataBytes, 0, dataBytes.Length);
}
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
return await reader.ReadToEndAsync();
}
}
}