C#/C# FullStack

미니멀 API 만들기

삽사 2023. 8. 10. 09:01

asp.net core 비어있음 프로젝트 생성

 

Nuget 패키지 설치

 

Program.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<TodoDB>(options =>
{
    options.UseInMemoryDatabase("Todo");
});

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.MapGet("/", () => "Hello DotnetConference 2022 Seoul!");

//할일 목록
app.MapGet("/todo", async (TodoDB db) => await db.TodoList.ToListAsync());

//할일 추가
app.MapPost("/todo", async ([FromBody] Todo todo, [FromServices] TodoDB db, HttpResponse response) =>
{
    db.TodoList.Add(todo);
    await db.SaveChangesAsync();

    return Results.Created($"todo/{todo.Id}", todo);
}).Accepts<Todo>("application/json")
  .Produces<Todo>(StatusCodes.Status201Created); 

//할일 수정
app.MapPut("/todo", async (int todoId,string title, [FromServices] TodoDB db, HttpResponse response) =>
{
    var todo = db.TodoList.SingleOrDefault(s => s.Id == todoId);

    if (todo == null) return Results.NotFound();

    todo.Title = title;
    await db.SaveChangesAsync();
    return Results.Created("/todo", todo);

});

//아이디로 할일 조회
app.MapGet("/todo/{id}", async (TodoDB db, int id) =>
    await db.TodoList.SingleOrDefaultAsync(s => s.Id == id) is Todo todo ? Results.Ok(todo) : Results.NoContent());


//제목으로 할일 조회
app.MapGet("/todo/search/{query}", (string query, TodoDB db) =>
{
    var todoList = db.TodoList.Where(x => x.Title.ToLower().Contains(query.ToLower())).ToList();
    return todoList.Count > 0 ? Results.Ok(todoList) : Results.NotFound();
}).Produces<List<Todo>>(StatusCodes.Status200OK)
  .Produces(StatusCodes.Status404NotFound);


app.UseSwagger();
app.UseSwaggerUI();

app.Run();

public class Todo
{
    [Key]
    public int Id { get; set; }
    public string? Title { get; set; }
    public bool Checked { get; set; }
}

class TodoDB : DbContext
{
    public TodoDB(DbContextOptions<TodoDB> options) : base(options) { }

    public DbSet<Todo> TodoList => Set<Todo>();
}

 

참고

https://www.youtube.com/watch?v=7Gqnw1R_nZc