Refactoring and adding new endpoint

This commit is contained in:
kdeng00
2023-10-06 22:18:23 -04:00
parent 4accff050c
commit 421488c120
6 changed files with 169 additions and 10 deletions
-1
View File
@@ -18,7 +18,6 @@ public class ContactManagement
#region Methods #region Methods
// TODO: Need to implement
// Queues the contact file to be processed latter // Queues the contact file to be processed latter
public ContactCreationQueue QueueContact(IFormFile file) public ContactCreationQueue QueueContact(IFormFile file)
{ {
@@ -32,12 +32,12 @@ public class ContactQueueCreationController : ControllerBase
public IActionResult Upload([FromForm(Name = "file")] List<IFormFile> contactFile, public IActionResult Upload([FromForm(Name = "file")] List<IFormFile> contactFile,
[FromForm(Name = "user_id")] string userID) [FromForm(Name = "user_id")] string userID)
{ {
// TODO: Save the file on the filesystem to be processed by a separate // Save the file on the filesystem to be processed by a separate
// system // system
var response = new CreateQueueResponse(); var response = new CreateQueueResponse();
var connString = this._config.GetConnectionString("MongoDBURI"); var connString = this._config.GetConnectionString("MongoDBURI");
var userRepo = new UsersRepository(connString!); var userRepo = new UsersRepository(connString!);
var queueRepo = new ContactCreationQueueepository(connString!); var queueRepo = new ContactCreationQueueRepository(connString!);
try try
{ {
+86
View File
@@ -0,0 +1,86 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using TextSender_API.Models;
using TextSender_API.Repositories;
namespace TextSender_API.Controllers;
[Authorize]
[ApiController]
[Route("api/v1/contact")]
public class ContactsController : ControllerBase
{
#region Fields
private IConfiguration _config;
private readonly ILogger<ContactsController> _logger;
#endregion
#region Constructors
public ContactsController(ILogger<ContactsController> logger, IConfiguration config)
{
this._logger = logger;
this._config = config;
}
#endregion
#region Methods
[HttpPost("new"), DisableRequestSizeLimit]
public IActionResult CreateContact([FromBody] Contact contact)
{
var response = new CreateContactResponse();
var connString = this._config.GetConnectionString("MongoDBURI");
var userRepo = new UsersRepository(connString!);
var contactsRepo = new ContactsRepository(connString!);
try
{
var contacts = contactsRepo.RetrieveAll();
if (contacts.Exists(c => c.PhoneNumber!.Equals(contact.PhoneNumber)) ||
string.IsNullOrEmpty(contact.UserID))
{
// The Contact already exists
return BadRequest(response);
}
var user = new User { Id = contact.UserID };
if (!userRepo.Exists(user).Item1)
{
return BadRequest(response);
}
contactsRepo.Create(contact);
response.Data.Add(contact);
}
catch (Exception ex)
{
this._logger.LogError($"An error occurred: {ex.Message}");
}
return Ok(response);
}
#endregion
#region Responses
public class CreateContactResponse
{
#region Properties
[JsonProperty("data")]
public List<Contact> Data { get; set; }
#endregion
#region Constructors
public CreateContactResponse()
{
this.Data = new List<Contact>();
}
#endregion
}
#endregion
}
+10 -2
View File
@@ -8,12 +8,20 @@ namespace TextSender_API.Models;
public class Contact public class Contact
{ {
#region Properties #region Properties
public int ContactID { get; set; } [BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set; }
[BsonElement("firstname")]
public string? Firstname { get; set; } public string? Firstname { get; set; }
[BsonElement("lastname")]
public string? Lastname { get; set; } public string? Lastname { get; set; }
[BsonElement("phonenumber")]
public string? PhoneNumber { get; set; } public string? PhoneNumber { get; set; }
[BsonElement("date_created")]
public DateTime DateCreated { get; set; } public DateTime DateCreated { get; set; }
public int UserID { get; set; } // [BsonRepresentation(BsonType.ObjectId)]
[BsonElement("user_id")]
public string? UserID { get; set; }
#endregion #endregion
} }
+5 -2
View File
@@ -6,6 +6,8 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using TextSender_API.Repositories;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container. // Add services to the container.
@@ -33,9 +35,10 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJw
}; };
}); });
var app = builder.Build(); // var connectionString = builder.Configuration.GetConnectionString("MongoDBURI");
var connString = builder.Configuration.GetConnectionString("DefaultConnection");
var app = builder.Build();
// Configure the HTTP request pipeline. // Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) if (app.Environment.IsDevelopment())
+65 -2
View File
@@ -5,7 +5,7 @@ using TextSender_API.Models;
namespace TextSender_API.Repositories; namespace TextSender_API.Repositories;
public class ContactCreationQueueepository : BaseRepository public class ContactCreationQueueRepository : BaseRepository
{ {
#region Fields #region Fields
private readonly IMongoCollection<ContactCreationQueue> _bookCollection; private readonly IMongoCollection<ContactCreationQueue> _bookCollection;
@@ -13,7 +13,7 @@ public class ContactCreationQueueepository : BaseRepository
#region Constructors #region Constructors
public ContactCreationQueueepository(string connectionString) public ContactCreationQueueRepository(string connectionString)
{ {
this._connectionString = connectionString; this._connectionString = connectionString;
this._tableName = "contactCreationQueue"; this._tableName = "contactCreationQueue";
@@ -66,3 +66,66 @@ public class ContactCreationQueueepository : BaseRepository
} }
#endregion #endregion
} }
public class ContactsRepository : BaseRepository
{
#region Fields
private readonly IMongoCollection<Contact> _bookCollection;
#endregion
#region Constructors
public ContactsRepository(string connectionString)
{
this._connectionString = connectionString;
this._tableName = "contacts";
var client = this.InitializeClient();
this._bookCollection = client.GetDatabase(this._databaseName).GetCollection<Contact>(this._tableName);
}
#endregion
#region Metods
public Tuple<bool, Contact> Exists(string id)
{
var allContacts= this.RetrieveAll();
var result = allContacts.FirstOrDefault(c => c.Id!.Equals(id));
if (result != null)
{
return new Tuple<bool, Contact>(true, result!);
}
else
{
return new Tuple<bool, Contact>(false, new Contact());
}
}
public void Create(Contact contact)
{
this._bookCollection.InsertOne(contact);
}
public List<Contact> RetrieveAll()
{
return this._bookCollection.Find(_ => true).ToList();
}
public void Update(Contact contact)
{
var filter = Builders<Contact>.Filter.Eq(c => c.Id, contact.Id);
this._bookCollection.ReplaceOne(filter, contact);
}
public void Delete(Contact contact)
{
var filter = Builders<Contact>.Filter.Eq(c => c.Id, contact.Id);
this._bookCollection.DeleteOne(filter);
}
private MongoClient InitializeClient()
{
return new MongoClient(this._connectionString);
}
#endregion
}