diff --git a/TheBank/BankWebApi/Adapters/CreditProgramAdapter.cs b/TheBank/BankWebApi/Adapters/CreditProgramAdapter.cs index e752285..3a638f2 100644 --- a/TheBank/BankWebApi/Adapters/CreditProgramAdapter.cs +++ b/TheBank/BankWebApi/Adapters/CreditProgramAdapter.cs @@ -54,7 +54,7 @@ public class CreditProgramAdapter : ICreditProgramAdapter { _logger.LogError(ex, "StorageException"); return CreditProgramOperationResponse.InternalServerError( - $"Error while working with data storage:{ex.InnerException!.Message}" + $"Error while working with data storage:{ex.InnerException?.Message}" ); } catch (Exception ex) @@ -86,7 +86,7 @@ public class CreditProgramAdapter : ICreditProgramAdapter { _logger.LogError(ex, "StorageException"); return CreditProgramOperationResponse.InternalServerError( - $"Error while working with data storage: {ex.InnerException!.Message}" + $"Error while working with data storage: {ex.InnerException?.Message}" ); } catch (Exception ex) @@ -122,7 +122,7 @@ public class CreditProgramAdapter : ICreditProgramAdapter { _logger.LogError(ex, "StorageException"); return CreditProgramOperationResponse.BadRequest( - $"Error while working with data storage: {ex.InnerException!.Message}" + $"Error while working with data storage: {ex.InnerException?.Message}" ); } catch (Exception ex) @@ -164,7 +164,7 @@ public class CreditProgramAdapter : ICreditProgramAdapter { _logger.LogError(ex, "StorageException"); return CreditProgramOperationResponse.BadRequest( - $"Error while working with data storage: {ex.InnerException!.Message}" + $"Error while working with data storage: {ex.InnerException?.Message}" ); } catch (Exception ex) @@ -195,7 +195,7 @@ public class CreditProgramAdapter : ICreditProgramAdapter { _logger.LogError(ex, "StorageException"); return CreditProgramOperationResponse.InternalServerError( - $"Error while working with data storage:{ex.InnerException!.Message}" + $"Error while working with data storage:{ex.InnerException?.Message}" ); } catch (Exception ex) @@ -226,7 +226,7 @@ public class CreditProgramAdapter : ICreditProgramAdapter { _logger.LogError(ex, "StorageException"); return CreditProgramOperationResponse.InternalServerError( - $"Error while working with data storage:{ex.InnerException!.Message}" + $"Error while working with data storage:{ex.InnerException?.Message}" ); } catch (Exception ex) diff --git a/TheBank/BankWebApi/Controllers/CreditProgramsController.cs b/TheBank/BankWebApi/Controllers/CreditProgramsController.cs index 38beb88..ad417ec 100644 --- a/TheBank/BankWebApi/Controllers/CreditProgramsController.cs +++ b/TheBank/BankWebApi/Controllers/CreditProgramsController.cs @@ -63,6 +63,7 @@ public class CreditProgramsController(ICreditProgramAdapter adapter) : Controlle /// модель от пользователя /// [HttpPost] + [AllowAnonymous] public IActionResult Register([FromBody] CreditProgramBindingModel model) { return _adapter.RegisterCreditProgram(model).GetResponse(Request, Response); diff --git a/TheBank/BankWebApi/Program.cs b/TheBank/BankWebApi/Program.cs index 6f7f794..ef05435 100644 --- a/TheBank/BankWebApi/Program.cs +++ b/TheBank/BankWebApi/Program.cs @@ -81,6 +81,15 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) }; }); +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowFrontend", policy => + { + policy.WithOrigins("http://localhost:26312") + .AllowAnyMethod() + .AllowAnyHeader(); + }); +}); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); builder.Services.AddSingleton(); @@ -135,7 +144,7 @@ if (app.Environment.IsProduction()) dbContext.Database.Migrate(); } } - +app.UseCors("AllowFrontend"); app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); diff --git a/TheBank/bankui/.env b/TheBank/bankui/.env index b684ca7..69583ef 100644 --- a/TheBank/bankui/.env +++ b/TheBank/bankui/.env @@ -1 +1 @@ -VITE_API_URL=https://localhost:7204/ \ No newline at end of file +VITE_API_URL=https://localhost:7204 \ No newline at end of file diff --git a/TheBank/bankui/src/api/client.ts b/TheBank/bankui/src/api/client.ts index db43c38..155525c 100644 --- a/TheBank/bankui/src/api/client.ts +++ b/TheBank/bankui/src/api/client.ts @@ -3,7 +3,11 @@ import { ConfigManager } from '@/lib/config'; const API_URL = ConfigManager.loadUrl(); export async function getData(path: string): Promise { - const res = await fetch(`${API_URL}/${path}`); + const res = await fetch(`${API_URL}/${path}`, { + headers: { + mode: 'no-cors', + }, + }); if (!res.ok) { throw new Error(`Не получается загрузить ${path}: ${res.statusText}`); } @@ -16,6 +20,7 @@ export async function postData(path: string, data: T) { method: 'POST', headers: { 'Content-Type': 'application/json', + mode: 'no-cors', }, body: JSON.stringify(data), }); @@ -29,6 +34,7 @@ export async function putData(path: string, data: T) { method: 'PUT', headers: { 'Content-Type': 'application/json', + mode: 'no-cors', }, body: JSON.stringify(data), }); diff --git a/TheBank/bankui/src/components/features/CreditProgramForm.tsx b/TheBank/bankui/src/components/features/CreditProgramForm.tsx index 0723124..f101a2f 100644 --- a/TheBank/bankui/src/components/features/CreditProgramForm.tsx +++ b/TheBank/bankui/src/components/features/CreditProgramForm.tsx @@ -25,19 +25,19 @@ import type { } from '@/types/types'; const storekeepers: { id: string; name: string }[] = [ - { id: 'store1', name: 'Кладовщик 1' }, - { id: 'store2', name: 'Кладовщик 2' }, + { id: crypto.randomUUID(), name: 'Кладовщик 1' }, + { id: crypto.randomUUID(), name: 'Кладовщик 2' }, ]; const periods: { id: string; name: string }[] = [ - { id: 'period1', name: 'Период 1' }, - { id: 'period2', name: 'Период 2' }, + { id: crypto.randomUUID(), name: 'Период 1' }, + { id: crypto.randomUUID(), name: 'Период 2' }, ]; const currencies: CurrencyBindingModel[] = [ - { id: 'curr1', name: 'Доллар США', abbreviation: 'USD', cost: 1 }, - { id: 'curr2', name: 'Евро', abbreviation: 'EUR', cost: 1.2 }, - { id: 'curr3', name: 'Рубль', abbreviation: 'RUB', cost: 0.01 }, + { id: crypto.randomUUID(), name: 'Доллар США', abbreviation: 'USD', cost: 1 }, + { id: crypto.randomUUID(), name: 'Евро', abbreviation: 'EUR', cost: 1.2 }, + { id: crypto.randomUUID(), name: 'Рубль', abbreviation: 'RUB', cost: 0.01 }, ]; const formSchema = z.object({ @@ -77,8 +77,12 @@ export const CreditProgramForm = ({ }); const handleSubmit = (data: FormValues) => { - const payload: CreditProgramBindingModel = { + const dataWithId = { ...data, + id: crypto.randomUUID(), + }; + const payload: CreditProgramBindingModel = { + ...dataWithId, currencyCreditPrograms: data.currencyCreditPrograms.map((currencyId) => ({ currencyId, })), diff --git a/TheBank/bankui/src/components/pages/CreditPrograms.tsx b/TheBank/bankui/src/components/pages/CreditPrograms.tsx index 9cfe911..8f515dd 100644 --- a/TheBank/bankui/src/components/pages/CreditPrograms.tsx +++ b/TheBank/bankui/src/components/pages/CreditPrograms.tsx @@ -20,6 +20,7 @@ export const CreditPrograms = (): React.JSX.Element => { const handleAdd = (data: CreditProgramBindingModel) => { console.log(data); + createCreditProgram(data); }; return (