TourIAm/TIAMWebApp/Shared/Services/BlogService.cs

86 lines
3.1 KiB
C#

using Microsoft.AspNetCore.Components.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Json;
using System.Text;
using System.Threading.Tasks;
using TIAMWebApp.Shared.Application.Models;
namespace TIAMWebApp.Shared.Application.Services
{
public class BlogService
{
private readonly HttpClient _http;
public BlogService(HttpClient http)
{
_http = http;
}
public async Task<List<BlogPostMetadata>> GetAllPostsAsync()
{
return await _http.GetFromJsonAsync<List<BlogPostMetadata>>("/api/blog") ?? new();
}
public async Task<BlogPostMetadata?> GetPostByIdAsync(string id)
{
return await _http.GetFromJsonAsync<BlogPostMetadata>($"/api/blog/{id}");
}
public async Task<BlogPostMetadata?> CreatePostAsync(BlogPostMetadata metadata, IBrowserFile? coverImage)
{
using var content = new MultipartFormDataContent();
content.Add(new StringContent(metadata.Title ?? ""), "Title");
content.Add(new StringContent(metadata.Lead ?? ""), "Lead");
content.Add(new StringContent(metadata.DriveLink ?? ""), "DriveLink");
content.Add(new StringContent(string.Join(",", metadata.Tags ?? new())), "Tags");
if (coverImage != null)
{
var fileContent = new StreamContent(coverImage.OpenReadStream(long.MaxValue));
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(coverImage.ContentType);
content.Add(fileContent, "CoverImage", coverImage.Name);
}
var response = await _http.PostAsync("/api/blog", content);
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<BlogPostMetadata>();
}
public async Task UpdatePostAsync(BlogPostMetadata metadata, IBrowserFile? newImageFile = null)
{
using var content = new MultipartFormDataContent();
content.Add(new StringContent(metadata.Title ?? ""), "Title");
content.Add(new StringContent(metadata.Lead ?? ""), "Lead");
content.Add(new StringContent(metadata.DriveLink ?? ""), "DriveLink");
content.Add(new StringContent(string.Join(",", metadata.Tags ?? new List<string>())), "Tags");
if (newImageFile != null)
{
var stream = newImageFile.OpenReadStream(maxAllowedSize: 10 * 1024 * 1024); // 10 MB max
var fileContent = new StreamContent(stream);
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(newImageFile.ContentType);
content.Add(fileContent, "CoverImage", newImageFile.Name);
}
var response = await _http.PutAsync($"/api/blog/{metadata.Id}", content);
response.EnsureSuccessStatusCode();
}
public async Task DeletePostAsync(string id)
{
var response = await _http.DeleteAsync($"/api/blog/{id}");
response.EnsureSuccessStatusCode();
}
}
}