
Windows
- 1 ответ
- 0 вопросов
0
Вклад в тег
version: '3'
services:
web:
volumes:
- ./web:/app
env_file:
- ./web/.env
build: ./web
ports:
- '8000:8000'
networks:
- my_network
other_service:
image: some_image
networks:
- my_network
networks:
my_network:
driver: bridge
environment:
- API_URL=http://external.api.com
version: '3'
services:
web:
volumes:
- ./web:/app
env_file:
- ./web/.env
build: ./web
ports:
- '8000:8000'
networks:
- my_network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
- my_network
networks:
my_network:
driver: bridge
public class DockerContext: DbContext
{
private bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true"; } }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!InDocker)
{
// Здесь переопределяем ConnectionString для миграций
}
}
public static bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true"; } }
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<DockerContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString(InDocker ? "DockerContext" : "MigrationContext") ?? throw new InvalidOperationException("Connection string 'DockerContext' not found.")));
}
public class ResponseResult<T> : IResponseResult<T>
{
public bool IsSuccess { get; private set; }
public ProblemDetails? Error { get; private set; }
public T? Data { get; private set; }
public static ResponseResult<T> Success(T data) => new ResponseResult<T> { IsSuccess = true, Data = data };
public static ResponseResult<T> Success() => new ResponseResult<T> { IsSuccess = true};
public static ResponseResult<T> Failure(Exception exception) => new ResponseResult<T>
{
IsSuccess = false,
Error = new ProblemDetails
{
Title = GetTitleByException(exception),
Detail = exception.Message,
Status = exception switch
{
ArgumentException => StatusCodes.Status400BadRequest,
KeyNotFoundException => StatusCodes.Status404NotFound,
UnauthorizedAccessException => StatusCodes.Status401Unauthorized,
_ => StatusCodes.Status500InternalServerError
},
Instance = Guid.NewGuid().ToString()
}
};
private static string GetTitleByException(Exception exception) =>
exception switch
{
ArgumentException => "Invalid argument",
KeyNotFoundException => "Resource not found",
UnauthorizedAccessException => "Unauthorized",
_ => "Internal server error"
};
}
return ResponseResult<bool>.Failure(
new KeyNotFoundException(
string.Format("User with login '{0}' not found", request.Login))
);
[HttpGet("verify")]
public async Task<ActionResult> VerifyUser(
[FromQuery] string login,
[FromQuery] string password,
CancellationToken cancellationToken)
{
var result = await mediator.Send(new VerifyQuery() { Login = login, Password = password }, cancellationToken);
if (result.IsSuccess)
{
return Ok(new { verify = result.Data });
}
return StatusCode(result.Error?.Status ?? 400, result.Error);
}