A => .gitignore +3 -0
@@ 1,3 @@
+.vscode
+bin
+obj
A => +129 -0
@@ 1,129 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using caint.Models;
namespace caint.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CommentsController : ControllerBase
{
private readonly CommentContext _context;
public CommentsController(CommentContext context)
{
_context = context;
}
// GET: api/Comments
[HttpGet]
public async Task<ActionResult<IEnumerable<Comment>>> Getcomments()
{
return await _context.comments.ToListAsync();
}
// GET: api/Comments/5
[HttpGet("{id}")]
public async Task<ActionResult<Comment>> GetComment(long id)
{
var comment = await _context.comments.FindAsync(id);
if (comment == null)
{
return NotFound();
}
return comment;
}
[HttpGet("thread/{id}")]
public async Task<ActionResult<IEnumerable<Comment>>> GetCommentThread(long id)
{
var comment = await _context.comments.ToListAsync();
List<Comment> returnList = new List<Comment>();
foreach (Comment singleComment in comment)
{
if (singleComment.threadId == id)
{
returnList.Add(singleComment);
}
}
if (comment == null)
{
return NotFound();
}
return returnList;
}
// PUT: api/Comments/5
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPut("{id}")]
public async Task<IActionResult> PutComment(long id, Comment comment)
{
if (id != comment.id)
{
return BadRequest();
}
_context.Entry(comment).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!CommentExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/Comments
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPost]
public async Task<ActionResult<Comment>> PostComment(Comment comment)
{
_context.comments.Add(comment);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetComment), new { id = comment.id }, comment);
}
// DELETE: api/Comments/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteComment(long id)
{
var comment = await _context.comments.FindAsync(id);
if (comment == null)
{
return NotFound();
}
_context.comments.Remove(comment);
await _context.SaveChangesAsync();
return NoContent();
}
private bool CommentExists(long id)
{
return _context.comments.Any(e => e.id == id);
}
}
}
A => +14 -0
@@ 1,14 @@
namespace caint.Models
{
public class Comment
{
public long id { get; set; }
public string name { get; set; }
public string body { get; set; }
public long threadId { get; set; }
}
}
\ No newline at end of file
A => +14 -0
@@ 1,14 @@
using Microsoft.EntityFrameworkCore;
namespace caint.Models
{
public class CommentContext : DbContext
{
public CommentContext(DbContextOptions<CommentContext> options) : base(options)
{
}
public DbSet<Comment> comments { get; set; }
}
}
\ No newline at end of file
A => Program.cs +26 -0
@@ 1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+
+namespace caint
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ CreateHostBuilder(args).Build().Run();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseStartup<Startup>();
+ });
+ }
+}
A => Properties/launchSettings.json +31 -0
@@ 1,31 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:46043",
+ "sslPort": 44348
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "caint": {
+ "commandName": "Project",
+ "dotnetRunMessages": "true",
+ "launchBrowser": true,
+ "launchUrl": "api/comments",
+ "applicationUrl": "https://localhost:5001;http://localhost:5000",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
A => Startup.cs +55 -0
@@ 1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.HttpsPolicy;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Microsoft.OpenApi.Models;
+using Microsoft.EntityFrameworkCore;
+using caint.Models;
+
+namespace caint
+{
+ public class Startup
+ {
+ public Startup(IConfiguration configuration)
+ {
+ Configuration = configuration;
+ }
+
+ public IConfiguration Configuration { get; }
+
+ // This method gets called by the runtime. Use this method to add services to the container.
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddDbContext<CommentContext>(opt => opt.UseInMemoryDatabase("caintcomments"));
+ services.AddControllers();
+ }
+
+ // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+ {
+ if (env.IsDevelopment())
+ {
+ app.UseDeveloperExceptionPage();
+ }
+
+ app.UseHttpsRedirection();
+
+ app.UseRouting();
+
+ app.UseAuthorization();
+
+ app.UseEndpoints(endpoints =>
+ {
+ endpoints.MapControllers();
+ });
+ }
+ }
+}
A => appsettings.Development.json +9 -0
@@ 1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft": "Warning",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ }
+}
A => appsettings.json +10 -0
@@ 1,10 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft": "Warning",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ },
+ "AllowedHosts": "*"
+}
A => caint.csproj +20 -0
@@ 1,20 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+ <PropertyGroup>
+ <TargetFramework>net5.0</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.0" NoWarn="NU1605" />
+ <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="5.0.0" NoWarn="NU1605" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.0">
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ <PrivateAssets>all</PrivateAssets>
+ </PackageReference>
+ <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0" />
+ <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.0" />
+ <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
+ </ItemGroup>
+
+</Project>