Compare commits

..

66 Commits

Author SHA1 Message Date
Vijay Uppu
6e305d0db3 Group by issue in responses 2024-01-22 12:10:26 -05:00
e82bae41c7 Update docker-compose.acr.yml for Azure Pipelines 2024-01-18 17:05:13 +00:00
70e3e24875 Update docker-compose.acr.yml for Azure Pipelines 2024-01-18 17:01:17 +00:00
Vijay Uppu
a3a4a85bc1 fixed region issue 2024-01-18 11:40:20 -05:00
Vijay Uppu
94e340d941 added active and in active survey endpoints 2023-12-19 13:17:05 -05:00
Vijay Uppu
8b05f61f44 Modified logic to get latest response based on survetid, locationId, ane employee id 2023-12-16 12:46:04 -05:00
Vijay Uppu
1c26852670 added survey start and end date validation 2023-12-13 17:08:59 -05:00
Vijay Uppu
9188ded00e adding multiple questions for survey id 2023-12-07 09:47:22 -05:00
Vijay Uppu
4b9ab46901 Merge branch 'docker-sql' of https://dev.azure.com/MDCSB-Telecommuters/Emergency%20Preparedness%20Disaster%20Recovery%20Project%20%28EPDRP%29/_git/Backend-API-Services into docker-sql 2023-12-07 09:27:52 -05:00
Reginald Cherenfant Jasmin
f967e38c81 Changing POST to PUT 2023-12-07 02:48:07 -05:00
Reginald Cherenfant Jasmin
5ad4478670 Merge Conflict resolution 2023-12-07 02:28:57 -05:00
Reginald Cherenfant Jasmin
d7005479c5 Adding endpoint for mutiple questions update 2023-12-07 02:16:00 -05:00
Reginald Cherenfant Jasmin
3de53c1198 conflict resolution 2023-12-07 01:45:26 -05:00
Reginald Cherenfant Jasmin
5cc331202b mergr conflict resolve 2023-12-07 01:41:00 -05:00
Uppu, Vijay
9ec9b8b96f Merged PR 79: changed download url format and added new endpoint for doculink isactive update
changed download url format and added new endpoint for doculink isactive update
2023-12-04 19:57:42 +00:00
Vijay Uppu
e58782243c changed download url format and added new endpoint for doculink isactive update 2023-12-04 14:56:13 -05:00
Vijay Uppu
795c7c021d changed download url format and added new endpoint for doculink isactive update 2023-12-04 14:54:01 -05:00
Vijay Uppu
b209c2619e Merge branch 'docker-sql' of https://dev.azure.com/MDCSB-Telecommuters/Emergency%20Preparedness%20Disaster%20Recovery%20Project%20%28EPDRP%29/_git/Backend-API-Services into docker-sql 2023-12-04 14:52:49 -05:00
Uppu, Vijay
b131994274 Merged PR 76: added IsActive flag in doculinks request
added IsActive flag in doculinks request
2023-12-04 14:54:04 +00:00
Vijay Uppu
fcc0205175 added IsActive flag in doculinks request 2023-12-04 09:52:05 -05:00
Vijay Uppu
0c90a6caaa Merge branch 'docker-sql' of https://dev.azure.com/MDCSB-Telecommuters/Emergency%20Preparedness%20Disaster%20Recovery%20Project%20%28EPDRP%29/_git/Backend-API-Services into docker-sql 2023-12-04 09:51:27 -05:00
Vijay Uppu
0ed7641a8b added IsActive flag in doculinks request 2023-12-04 09:51:19 -05:00
Uppu, Vijay
92666d6efa Merged PR 74: doculinks and attachments url changes 2023-12-01 23:08:35 +00:00
Vijay Uppu
9aa3f230c5 attachment and doculinks url changes 2023-12-01 17:23:19 -05:00
Vijay Uppu
99a7802cf6 attachment and doculinks url changes 2023-12-01 17:22:49 -05:00
Vijay Uppu
db5e14bde4 added multi language support for doculink attachments 2023-11-30 19:04:14 -05:00
Santhosh S
1df15e9a6d Return Employee ID for POST 2023-11-27 14:49:14 -05:00
Uppu, Vijay
66215d1fce Merged PR 65: fixed question translation issue
fixed question translation issue
2023-11-15 14:09:10 +00:00
Vijay Uppu
281a789deb fixed question transation issue 2023-11-15 09:05:20 -05:00
Uppu, Vijay
8ccb37f45b Merged PR 63: Added new endpoint for creating multiple questions
Added new endpoint for creating multiple questions
2023-11-14 21:48:48 +00:00
Vijay Uppu
fc154274a0 Added new endpoint for creating multiple questions 2023-11-14 15:16:15 -05:00
Santhosh S
1fba3e81f1 Reverted Surveys CORS changes WithOrigins('*') 2023-11-13 21:24:16 -05:00
Santhosh S
f00c7dd99c Updated WithOrigins(http://localhost:3000) test fix CORS 2023-11-12 14:28:58 -05:00
Santhosh S
b7e5e7d7fe Updated CORS with POST specific with Surveys 2023-11-11 22:00:06 -05:00
Santhosh S
43eb29c2e8 Updat for CORS Resolution 2023-11-10 14:09:43 -05:00
Reginald Cherenfant Jasmin
45c61ee729 Addi ng CORS 2023-11-10 13:27:31 -05:00
Reginald Cherenfant Jasmin
17df019d55 Adding CORS policy to all micro-services 2023-11-10 13:07:50 -05:00
Uppu, Vijay
d0650c36f3 Merged PR 59: completed heatmap api changes for location and response api
completed heatmap api changes for location and response api
2023-11-07 22:28:57 +00:00
uppuv
19fac4d810 completed heatmap api changes for location and response api 2023-11-07 17:04:19 -05:00
Uppu, Vijay
17cd993a56 Merged PR 56: fixed survey issue in response level, and added logic for start and end date...
fixed survey issue in response level, and added logic for start and end date as optional date.
2023-11-01 18:34:47 +00:00
uppuv
8285588db9 fixed survey issue in response level, and added logic for start and end date as optional date. 2023-11-01 14:29:47 -04:00
Uppu, Vijay
6fbe21979f Merged PR 53: fixed survey put issue, and added export excel in responses
fixed survey put issue, amd added export excel in responses
2023-11-01 13:29:16 +00:00
uppuv
fc166e65c9 fixed survey put issue, amd added export excel in responses 2023-10-31 16:40:46 -04:00
uppuv
ae6b306290 reverted doculinks grouping by linktype 2023-10-24 12:22:59 -04:00
uppuv
d3a751a6ad added status field in survey micro service 2023-10-23 11:56:39 -04:00
Santhosh S
8624eeeb97 Merge branch 'docker-sql' of https://dev.azure.com/MDCSB-Telecommuters/Emergency%20Preparedness%20Disaster%20Recovery%20Project%20%28EPDRP%29/_git/Backend-API-Services into docker-sql 2023-10-16 22:45:08 -04:00
Santhosh S
16d45d6632 docker-compose.acr added 2023-10-16 22:44:08 -04:00
uppuv
c77e0452c4 added logic to get active surveys from survey responses 2023-10-16 14:13:20 -04:00
uppuv
8e0a7df68b added muilti language return format for question categories for question by survey 2023-10-13 13:29:21 -04:00
Santhosh S
01ccd97528 table update tested 2023-10-13 13:17:00 -04:00
Santhosh S
26b360e0a9 Merge branch 'docker-sql' of https://dev.azure.com/MDCSB-Telecommuters/Emergency%20Preparedness%20Disaster%20Recovery%20Project%20%28EPDRP%29/_git/Backend-API-Services into docker-sql 2023-10-13 08:58:24 -04:00
uppuv
360a58c026 Merge branch 'docker-branch' into docker-sql 2023-10-12 16:03:21 -04:00
Santhosh S
11c6fc0dc9 Merge branch 'docker-sql' of https://dev.azure.com/MDCSB-Telecommuters/Emergency%20Preparedness%20Disaster%20Recovery%20Project%20%28EPDRP%29/_git/Backend-API-Services into docker-sql 2023-10-11 21:26:04 -04:00
Santhosh S
99633d8dda Connection string sql dev server updated 2023-10-11 21:23:47 -04:00
uppuv
8e3f6674c6 Merge branch 'docker-branch' into docker-sql 2023-10-11 19:25:09 -04:00
uppuv
14956057cd Merge branch 'docker-branch' into docker-sql 2023-10-11 15:34:42 -04:00
uppuv
340ba6fa6d removed all migrations 2023-10-10 16:34:56 -04:00
uppuv
46794057c4 Added sql docker logic 2023-10-10 16:28:30 -04:00
uppuv
643bc0c76a Merged docker with docker sql branch 2023-10-06 15:14:13 -04:00
uppuv
d0023114a3 updated doculink changes 2023-09-26 12:40:55 -04:00
uppuv
465bf4b081 Merge branch 'dev' into Database-Integration 2023-09-13 16:52:43 -04:00
uppuv
e04bccfffd Merged new dev changes 2023-09-13 13:16:42 -04:00
uppuv
0544c7397d 314: updated document multi language output format 2023-09-11 13:34:50 -04:00
uppuv
9c536a1c52 Modified Documents api for InMemory Logic 2023-09-11 13:34:50 -04:00
uppuv
48be1a74c9 Merge branch 'DocumentsAPI' into Database-Integration 2023-08-31 19:02:47 -04:00
uppuv
eb07c31ff6 Database integration 2023-08-18 17:14:41 -04:00
78 changed files with 1476 additions and 297 deletions

Binary file not shown.

View File

@ -0,0 +1,7 @@
{
"ExpandedNodes": [
""
],
"SelectedNode": "\\DamageAssesment.sln",
"PreviewInSolutionExplorer": false
}

View File

@ -0,0 +1,25 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

View File

@ -396,3 +396,4 @@ FodyWeavers.xsd
# JetBrains Rider
*.sln.iml
**/migrations/

View File

@ -1,17 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -1,13 +1,19 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
namespace DamageAssesment.Api.Answers.Db
{
public class AnswerDbContext:DbContext
{
public AnswerDbContext(DbContextOptions options):base(options)
private IConfiguration _Configuration { get; set; }
public AnswerDbContext(DbContextOptions options,IConfiguration configuration):base(options)
{
_Configuration= configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("AnswerConnection"));
}
public DbSet<Db.Answer> Answers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)

View File

@ -0,0 +1,21 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Answers/DamageAssesment.Api.Answers.csproj", "DamageAssesment.Api.Answers/"]
RUN dotnet restore "DamageAssesment.Api.Answers/DamageAssesment.Api.Answers.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Answers"
RUN dotnet build "DamageAssesment.Api.Answers.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Answers.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Answers.dll"]

View File

@ -8,10 +8,16 @@ var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -23,11 +29,14 @@ builder.Services.AddScoped<IAnswersProvider, AnswersProvider>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
builder.Services.AddDbContext<AnswerDbContext>(option =>
{
option.UseInMemoryDatabase("Answers");
option.UseSqlServer("AnswerConnection");
});
var app = builder.Build();
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
@ -35,9 +44,13 @@ if (app.Environment.IsDevelopment())
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
// Map controllers to their respective routes.
app.MapControllers();
app.Run();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:18005",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Answers": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5200",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5200"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:18005",
"sslPort": 0
}
}
}

View File

@ -198,13 +198,12 @@ namespace DamageAssesment.Api.Answers.Providers
{
if (!answerDbContext.Answers.Any())
{
answerDbContext.Answers.Add(new Db.Answer() { Id = 1, AnswerText = "Yes", Comment = "Comment test 4", QuestionId = 1, SurveyResponseId = 1 });
answerDbContext.Answers.Add(new Db.Answer() { Id = 2, AnswerText = "No", Comment = "Comment test 5", QuestionId = 2, SurveyResponseId = 1 });
// Uncomment the lines below to add more initial data if needed
//answerDbContext.Answers.Add(new Db.Answer() { Id = 3, AnswerText = "No", Comment = "No Comment", QuestionId = 3, SurveyResponseId = 1 });
//answerDbContext.Answers.Add(new Db.Answer() { Id = 4, AnswerText = "Yes", Comment = "No Comment", QuestionId = 1, SurveyResponseId = 2 });
//answerDbContext.Answers.Add(new Db.Answer() { Id = 5, AnswerText = "No", Comment = "No Comment", QuestionId = 2, SurveyResponseId = 2 });
//answerDbContext.Answers.Add(new Db.Answer() { Id = 6, AnswerText = "No", Comment = "No Comment", QuestionId = 3, SurveyResponseId = 2 });
answerDbContext.Answers.Add(new Db.Answer() { AnswerText = "Yes", Comment = "", QuestionId = 1, SurveyResponseId = 1 });
answerDbContext.Answers.Add(new Db.Answer() { AnswerText = "No", Comment = "myComment", QuestionId = 2, SurveyResponseId = 1 });
//answerDbContext.Answers.Add(new Db.Answer() { AnswerText = "No", Comment = "No Comment", QuestionId = 3, SurveyResponseId = 1 });
//answerDbContext.Answers.Add(new Db.Answer() { AnswerText = "Yes", Comment = "No Comment", QuestionId = 1, SurveyResponseId = 2 });
//answerDbContext.Answers.Add(new Db.Answer() { AnswerText = "No", Comment = "No Comment", QuestionId = 2, SurveyResponseId = 2 });
//answerDbContext.Answers.Add(new Db.Answer() { AnswerText = "No", Comment = "No Comment", QuestionId = 3, SurveyResponseId = 2 });
answerDbContext.SaveChanges();
}
}

View File

@ -8,5 +8,11 @@
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
"AllowedHosts": "*",
"ConnectionStrings": {
//"AnswerConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;"
// "AnswerConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;",
"AnswerConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -5,6 +5,8 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
@ -12,8 +14,20 @@
<PackageReference Include="Azure.Storage.Blobs" Version="12.16.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -1,11 +1,19 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
namespace DamageAssesment.Api.Attachments.Db
{
public class AttachmentsDbContext:DbContext
{
public AttachmentsDbContext(DbContextOptions options) : base(options)
private IConfiguration _Configuration { get; set; }
public AttachmentsDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("AttachmentConnection"));
}
public DbSet<Db.Attachment> Attachments { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)

View File

@ -0,0 +1,29 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Attachments/DamageAssesment.Api.Attachments.csproj", "DamageAssesment.Api.Attachments/"]
RUN dotnet restore "DamageAssesment.Api.Attachments/DamageAssesment.Api.Attachments.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Attachments"
RUN dotnet build "DamageAssesment.Api.Attachments.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Attachments.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# Create directories for attachments and set permissions
RUN mkdir -p /app/DMS_Attachments/Active && \
mkdir -p /app/DMS_Attachments/Deleted && \
chown -R www-data:www-data /app/DMS_Attachments
# Update appsettings.json with the correct paths for attachments
RUN sed -i 's#"folderpath": "DMS_Attachments/Active"#"folderpath": "/app/DMS_Attachments/Active"#' appsettings.json && \
sed -i 's#"Deletepath": "DMS_Attachments/Deleted"#"Deletepath": "/app/DMS_Attachments/Deleted"#' appsettings.json
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Attachments.dll"]

View File

@ -8,12 +8,18 @@ using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -28,7 +34,7 @@ builder.Services.AddScoped<IAzureBlobService,AzureBlobService>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
builder.Services.AddDbContext<AttachmentsDbContext>(option =>
{
option.UseInMemoryDatabase("Attachments");
option.UseSqlServer("AttachmentConnection");
});
builder.Services.Configure<FormOptions>(o =>
{
@ -36,6 +42,9 @@ builder.Services.Configure<FormOptions>(o =>
o.MultipartBodyLengthLimit = int.MaxValue;
o.MemoryBufferThreshold = int.MaxValue;
});
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
@ -46,9 +55,11 @@ if (app.Environment.IsDevelopment())
app.UseSwaggerUI();
}
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
app.UseHttpsRedirection();
app.MapControllers();
app.UseStaticFiles();
app.Run();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:65305",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Attachments": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5243",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5243"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:65305",
"sslPort": 0
}
}
}

View File

@ -25,7 +25,7 @@ namespace DamageAssesment.Api.Attachments.Providers
this.httpContextAccessor = httpContextAccessor;
baseUrl = $"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host}";
baseUrl = baseUrl + "/attachments/download";
SeedData();
//SeedData();
}
public async Task<(bool IsSuccess, IEnumerable<Models.Attachment> Attachments, string ErrorMessage)> GetAttachmentsAsync()
{

View File

@ -12,5 +12,11 @@
"Fileupload": {
"folderpath": "DMS_Attachments/Active",
"Deletepath": "DMS_Attachments/Deleted"
},
"ConnectionStrings": {
//"AttachmentConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;"
// "AttachmentConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;"
"AttachmentConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>

View File

@ -1,10 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
@ -22,6 +24,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -7,8 +7,15 @@ namespace DamageAssesment.Api.DocuLinks.Db
{
public class DoculinkDbContext : DbContext
{
public DoculinkDbContext(DbContextOptions options) : base(options)
private IConfiguration _Configuration { get; set; }
public DoculinkDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("DoculinConnection"));
}
public DbSet<Db.Doculink> Documents { get; set; }
public DbSet<Db.LinkType> LinkTypes { get; set; }

View File

@ -0,0 +1,30 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.DocuLinks/DamageAssesment.Api.DocuLinks.csproj", "DamageAssesment.Api.DocuLinks/"]
RUN dotnet restore "DamageAssesment.Api.DocuLinks/DamageAssesment.Api.DocuLinks.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.DocuLinks"
RUN dotnet build "DamageAssesment.Api.DocuLinks.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.DocuLinks.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# Create directories for attachments and set permissions
RUN mkdir -p /app/DASA_Documents/Active && \
mkdir -p /app/DASA_Documents/Deleted && \
chown -R www-data:www-data /app/DASA_Documents
# Update appsettings.json with the correct paths for attachments
RUN sed -i 's#"folderpath": "DASA_Documents/Active"#"folderpath": "/app/DASA_Documents/Active"#' appsettings.json && \
sed -i 's#"Deletepath": "DASA_Documents/Deleted"#"Deletepath": "/app/DASA_Documents/Deleted"#' appsettings.json
ENTRYPOINT ["dotnet", "DamageAssesment.Api.DocuLinks.dll"]

View File

@ -6,6 +6,11 @@ using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Add services to the container.
builder.Services.AddControllers();
@ -26,8 +31,11 @@ builder.Services.AddScoped<IAzureBlobService, AzureBlobService>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
builder.Services.AddDbContext<DoculinkDbContext>(option =>
{
option.UseInMemoryDatabase("DocumentConnection");
option.UseSqlServer("DoculinConnection");
});
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
@ -37,6 +45,10 @@ if (app.Environment.IsDevelopment())
app.UseSwaggerUI();
}
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
app.MapControllers();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60754",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Questions": {
"DamageAssesment.Api.Doculinks": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5133",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5136"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:14425",
"sslPort": 0
}
}
}

View File

@ -6,6 +6,12 @@
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
//"DoculinConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;",
//"DoculinConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;"
"DoculinConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
},
"Fileupload": {
"folderpath": "DASA_Documents/Active",
"Deletepath": "DASA_Documents/Deleted"

View File

@ -5,13 +5,26 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -4,18 +4,23 @@ namespace DamageAssesment.Api.Employees.Db
{
public class EmployeeDbContext: DbContext
{
public DbSet<Db.Employee> Employees { get; set; }
public EmployeeDbContext(DbContextOptions options) : base(options)
private IConfiguration _Configuration { get; set; }
public EmployeeDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("EmployeeConnection"));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Employee>()
.Property(item => item.Id)
.ValueGeneratedOnAdd();
}
public DbSet<Db.Employee> Employees { get; set; }
}
}

View File

@ -0,0 +1,21 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Employees/DamageAssesment.Api.Employees.csproj", "DamageAssesment.Api.Employees/"]
RUN dotnet restore "DamageAssesment.Api.Employees/DamageAssesment.Api.Employees.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Employees"
RUN dotnet build "DamageAssesment.Api.Employees.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Employees.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Employees.dll"]

View File

@ -6,12 +6,18 @@ using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -24,9 +30,11 @@ builder.Services.AddScoped<IEmployeesProvider, EmployeesProvider>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
builder.Services.AddDbContext<EmployeeDbContext>(option =>
{
option.UseInMemoryDatabase("Employees");
option.UseSqlServer("EmployeeConnection");
});
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
@ -43,6 +51,11 @@ if (app.Environment.IsDevelopment())
}
}
app.UseCors("DamageAppCorsPolicy");
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
app.MapControllers();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:14425",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Employees": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5135",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5135"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:14425",
"sslPort": 0
}
}
}

View File

@ -13,5 +13,11 @@
"endpoint1": "xxx",
"endpoint2": "xxx",
"endpoint3": "xxx"
},
"ConnectionStrings": {
//"EmployeeConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;",
//"EmployeeConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;"
"EmployeeConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -5,13 +5,27 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -4,6 +4,16 @@ namespace DamageAssesment.Api.Locations.Db
{
public class LocationDbContext : DbContext
{
private IConfiguration _Configuration { get; set; }
public LocationDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("LocationConnection"));
}
public DbSet<Db.Location> Locations { get; set; }
public DbSet<Db.Region> Regions { get; set; }
public LocationDbContext(DbContextOptions options) : base(options)

View File

@ -0,0 +1,21 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Locations/DamageAssesment.Api.Locations.csproj", "DamageAssesment.Api.Locations/"]
RUN dotnet restore "DamageAssesment.Api.Locations/DamageAssesment.Api.Locations.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Locations"
RUN dotnet build "DamageAssesment.Api.Locations.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Locations.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Locations.dll"]

View File

@ -5,13 +5,18 @@ using Microsoft.EntityFrameworkCore;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Add services to the container.
// Add controller services and API Explorer for endpoint discovery.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -24,8 +29,11 @@ builder.Services.AddScoped<IRegionsProvider, RegionsProvider>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
builder.Services.AddDbContext<LocationDbContext>(option =>
{
option.UseInMemoryDatabase("Locations");
option.UseSqlServer("LocationConnection");
});
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
@ -44,6 +52,11 @@ if (app.Environment.IsDevelopment())
}
}
app.UseCors("DamageAppCorsPolicy");
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
app.MapControllers();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:20458",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Locations": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5213",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5213"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:20458",
"sslPort": 0
}
}
}

View File

@ -8,5 +8,11 @@
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
"AllowedHosts": "*",
"ConnectionStrings": {
//"LocationConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;",
// "LocationConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;"
"LocationConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -5,13 +5,27 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -6,6 +6,16 @@ namespace DamageAssesment.Api.Questions.Db
{
public class QuestionDbContext : DbContext
{
private IConfiguration _Configuration { get; set; }
public QuestionDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("QuestionConnection"));
}
public DbSet<Db.Question> Questions { get; set; }
public DbSet<Db.QuestionType> QuestionTypes { get; set; }
public DbSet<Db.QuestionsTranslation> QuestionsTranslations { get; set; }

View File

@ -0,0 +1,21 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Questions/DamageAssesment.Api.Questions.csproj", "DamageAssesment.Api.Questions/"]
RUN dotnet restore "DamageAssesment.Api.Questions/DamageAssesment.Api.Questions.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Questions"
RUN dotnet build "DamageAssesment.Api.Questions.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Questions.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Questions.dll"]

View File

@ -15,8 +15,14 @@ builder.Services.AddControllers();
builder.Services.AddScoped<IQuestionsProvider, QuestionsProvider>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Add controller services and API Explorer for endpoint discovery.
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -26,8 +32,11 @@ builder.Services.AddSwaggerGen(c =>
});
builder.Services.AddDbContext<QuestionDbContext>(option =>
{
option.UseInMemoryDatabase("Questions");
option.UseSqlServer("QuestionConnection");
});
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
@ -44,6 +53,9 @@ if (app.Environment.IsDevelopment())
}
}
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
app.MapControllers();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60754",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Questions": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5133",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5133"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60754",
"sslPort": 0
}
}
}

View File

@ -31,8 +31,7 @@ namespace DamageAssesment.Api.Questions.Providers
questionDbContext.QuestionTypes.Add(new Db.QuestionType() { TypeText = "TextBox" });
questionDbContext.SaveChanges();
}
if (!questionDbContext.QuestionCategories.Any())
if (!questionDbContext.QuestionsTranslations.Any())
{
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { IconName = "Flooding", IconLibrary = "https://example.com/images/img1.png" });
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { IconName = "Electrical", IconLibrary = "https://example.com/images/img2.png" });

View File

@ -8,5 +8,11 @@
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
"AllowedHosts": "*",
"ConnectionStrings": {
//"QuestionConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;"
// "QuestionConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;"
"QuestionConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -10,7 +10,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="xunit" Version="2.4.2" />

View File

@ -5,15 +5,32 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="EPPlus" Version="7.0.0" />
<PackageReference Include="ClosedXML" Version="0.102.1" />
<PackageReference Include="EPPlus" Version="6.2.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.5" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -4,12 +4,17 @@ namespace DamageAssesment.Api.Responses.Db
{
public class SurveyResponseDbContext:DbContext
{
public DbSet<Db.SurveyResponse> SurveyResponses { get; set; }
public SurveyResponseDbContext(DbContextOptions options) : base(options)
private IConfiguration _Configuration { get; set; }
public SurveyResponseDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("ResponsesConnection"));
}
public DbSet<Db.SurveyResponse> SurveyResponses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{

View File

@ -0,0 +1,21 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Responses/DamageAssesment.Api.Responses.csproj", "DamageAssesment.Api.Responses/"]
RUN dotnet restore "DamageAssesment.Api.Responses/DamageAssesment.Api.Responses.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Responses"
RUN dotnet build "DamageAssesment.Api.Responses.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Responses.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Responses.dll"]

View File

@ -5,7 +5,6 @@
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public string CategoryImage { get; set; }
public object CategoryNames { get; set; }
public List<Question> Questions { get; set; }
}
}

View File

@ -16,6 +16,10 @@ const int intervalForCircuitBraker = 5; //5 seconds
// Add services to the container.
builder.Services.AddControllers();
// CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddScoped<ISurveysResponse, SurveyResponsesProvider>();
@ -36,6 +40,7 @@ builder.Services.AddHttpClient<IHttpUtil, HttpUtil>().
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -45,8 +50,11 @@ builder.Services.AddSwaggerGen(c =>
});
builder.Services.AddDbContext<SurveyResponseDbContext>(option =>
{
option.UseInMemoryDatabase("Responses");
option.UseSqlServer("ResponsesConnection");
});
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
@ -56,6 +64,7 @@ if (app.Environment.IsDevelopment())
app.UseSwaggerUI();
}
app.UseCors("DamageAppCorsPolicy");
app.UseAuthorization();
app.MapControllers();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58856",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.SurveyResponses": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5104",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5104"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58856",
"sslPort": 0
}
}
}

View File

@ -1,16 +1,16 @@
using DamageAssesment.Api.Responses.Interfaces;
using ClosedXML.Excel;
using DamageAssesment.Api.Responses.Interfaces;
using DamageAssesment.Api.Responses.Models;
using OfficeOpenXml;
using System.Collections.Generic;
using System.ComponentModel;
namespace DamageAssesment.Api.Responses.Providers
{
public class ExcelExportService : IExcelExportService
public class ExcelExportService: IExcelExportService
{
public byte[] ExportToExcel<T1>(List<object> responses)
{
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage())
{
// Create the first worksheet and populate it with responses
@ -29,7 +29,7 @@ namespace DamageAssesment.Api.Responses.Providers
for (int col = 1; col <= properties.Length; col++)
{
worksheet.Cells[1, col].Value = properties[col - 1].Name;
if (properties[col - 1].Name.ToLower().Contains("attachment"))
if(properties[col - 1].Name.ToLower().Contains("attachment"))
IsAttchments.Add(col);
}
@ -39,7 +39,7 @@ namespace DamageAssesment.Api.Responses.Providers
for (int col = 1; col <= properties.Length; col++)
{
string value = Convert.ToString(properties[col - 1].GetValue(data[row - 2]));
string value = Convert.ToString(properties[col - 1].GetValue(data[row - 2]));
if (IsAttchments.Where(a => a == col).Count() > 0 && !string.IsNullOrEmpty(value))
{
List<string> attachments = value.Split("##").ToList();

View File

@ -6,15 +6,26 @@
}
},
"AllowedHosts": "*",
//"EndPointSettings": {
// "AnswerUrlBase": "http://localhost:5200",
// "LocationUrlBase": "http://localhost:5213",
// "RegionUrlBase": "http://localhost:5211",
// "QuestionUrlBase": "http://localhost:5133",
// "EmployeeUrlBase": "http://localhost:5135",
// "AttachmentUrlBase": "http://localhost:5243",
// "SurveyUrlBase": "http://localhost:5009"
//},
//Endpoints for docker-container
"EndPointSettings": {
"AnswerUrlBase": "http://localhost:5200",
"LocationUrlBase": "http://localhost:5213",
"RegionUrlBase": "http://localhost:5211",
"QuestionUrlBase": "http://localhost:5133",
"EmployeeUrlBase": "http://localhost:5135",
"AttachmentUrlBase": "http://localhost:5243",
"SurveyUrlBase": "http://localhost:5009"
"AnswerUrlBase": "http://damageassesment.api.answers:80",
"LocationUrlBase": "http://damageassesment.api.locations:80",
"QuestionUrlBase": "http://damageassesment.api.questions:80",
"EmployeeUrlBase": "http://damageassesment.api.employees:80",
"AttachmentUrlBase": "http://damageassesment.api.attachments:80",
"SurveyUrlBase": "http://damageassesment.api.surveys:80"
},
"RessourceSettings": {
"Employee": "/employees",
"EmployeeById": "/employees/{0}",
@ -29,5 +40,10 @@
"AnswerByResponse": "/answers/byresponse/{0}",
"Location": "/locations",
"Region": "/regions"
},
"ConnectionStrings": {
//"SurveyResponseConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;"
//"ResponsesConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;"
"ResponsesConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -0,0 +1,55 @@
// <auto-generated />
using DamageAssesment.Api.SurveyResponses.Db;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace DamageAssesment.Api.SurveyResponses.Migrations
{
[DbContext(typeof(SurveyResponseDbContext))]
[Migration("20230817221348_InitialSurveyResponse")]
partial class InitialSurveyResponse
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("DamageAssesment.Api.SurveyResponses.Db.SurveyResponse", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("EmployeeId")
.IsRequired()
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("LocationId")
.IsRequired()
.HasMaxLength(4)
.HasColumnType("nvarchar(4)");
b.Property<int>("SurveyId")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("SurveyResponses");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,36 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace DamageAssesment.Api.SurveyResponses.Migrations
{
/// <inheritdoc />
public partial class InitialSurveyResponse : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "SurveyResponses",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
SurveyId = table.Column<int>(type: "int", nullable: false),
LocationId = table.Column<string>(type: "nvarchar(4)", maxLength: 4, nullable: false),
EmployeeId = table.Column<string>(type: "nvarchar(6)", maxLength: 6, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SurveyResponses", x => x.Id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "SurveyResponses");
}
}
}

View File

@ -0,0 +1,52 @@
// <auto-generated />
using DamageAssesment.Api.SurveyResponses.Db;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace DamageAssesment.Api.SurveyResponses.Migrations
{
[DbContext(typeof(SurveyResponseDbContext))]
partial class SurveyResponseDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("DamageAssesment.Api.SurveyResponses.Db.SurveyResponse", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("EmployeeId")
.IsRequired()
.HasMaxLength(6)
.HasColumnType("nvarchar(6)");
b.Property<string>("LocationId")
.IsRequired()
.HasMaxLength(4)
.HasColumnType("nvarchar(4)");
b.Property<int>("SurveyId")
.HasColumnType("int");
b.HasKey("Id");
b.ToTable("SurveyResponses");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -5,13 +5,27 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

View File

@ -4,11 +4,18 @@ namespace DamageAssesment.Api.Surveys.Db
{
public class SurveysDbContext : DbContext
{
private IConfiguration _Configuration { get; set; }
public SurveysDbContext(DbContextOptions options, IConfiguration configuration) : base(options)
{
_Configuration = configuration;
}
public DbSet<Db.Survey> Surveys { get; set; }
public DbSet<Db.SurveyTranslation> SurveysTranslation { get; set; }
public SurveysDbContext(DbContextOptions options) : base(options)
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
// connect to sql server with connection string from app settings
options.UseSqlServer(_Configuration.GetConnectionString("SurveyConnection"));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{

View File

@ -0,0 +1,21 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DamageAssesment.Api.Surveys/DamageAssesment.Api.Surveys.csproj", "DamageAssesment.Api.Surveys/"]
RUN dotnet restore "DamageAssesment.Api.Surveys/DamageAssesment.Api.Surveys.csproj"
COPY . .
WORKDIR "/src/DamageAssesment.Api.Surveys"
RUN dotnet build "DamageAssesment.Api.Surveys.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DamageAssesment.Api.Surveys.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DamageAssesment.Api.Surveys.dll"]

View File

@ -10,7 +10,11 @@ using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Retrieve the security key for JWT token validation.
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
// Configure JWT authentication and validation.
builder.Services.AddAuthentication(item =>
{
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
@ -29,12 +33,21 @@ builder.Services.AddAuthentication(item =>
};
});
//CORS setup to allow requests from any origin.
builder.Services.AddCors(p => p.AddPolicy("DamageAppCorsPolicy", build => {
build.WithOrigins("*").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
}));
// Add controller services and API Explorer for endpoint discovery.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddScoped<ISurveyProvider, SurveysProvider>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
// Add Swagger/OpenAPI documentation support.
builder.Services.AddSwaggerGen(c =>
{
// Include XML comments from your assembly
@ -42,10 +55,13 @@ builder.Services.AddSwaggerGen(c =>
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
// Configure the database context for SurveysDbContext using SQL Server.
builder.Services.AddDbContext<SurveysDbContext>(option =>
{
option.UseInMemoryDatabase("Surveys");
option.UseSqlServer("SurveyConnection");
});
var app = builder.Build();
// Configure the HTTP request pipeline.
@ -53,7 +69,7 @@ if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
// Seed initial data in the database when in development mode
using (var serviceScope = app.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
@ -61,10 +77,11 @@ if (app.Environment.IsDevelopment())
surveyProvider.seedData();
}
}
// Enable CORS, authentication, and authorization middleware.
app.UseCors("DamageAppCorsPolicy");
app.UseAuthentication();
app.UseAuthorization();
// Map controllers to their respective routes.
app.MapControllers();
app.Run();

View File

@ -1,23 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51498",
"sslPort": 0
}
},
{
"profiles": {
"DamageAssesment.Api.Surveys": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5009",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5009"
},
"IIS Express": {
"commandName": "IISExpress",
@ -26,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"environmentVariables": {
"ASPNETCORE_URLS": "http://+:80"
},
"publishAllPorts": true
}
},
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51498",
"sslPort": 0
}
}
}

View File

@ -85,7 +85,7 @@ namespace DamageAssesment.Api.Surveys.Providers
MultiLanguage = dict;
return MultiLanguage;
}
public string GetStatus(DateTime? StartDate, DateTime? EndDate)
public string GetStatus(DateTime? StartDate,DateTime? EndDate)
{
try
{
@ -158,7 +158,7 @@ namespace DamageAssesment.Api.Surveys.Providers
EndDate = s.EndDate,
IsEnabled = s.IsEnabled,
CreatedDate = s.CreatedDate,
Status = GetStatus(s.StartDate, s.EndDate),
Status= GetStatus(s.StartDate,s.EndDate),
Titles = CreateMultiLanguageObject(GetSurveyTranslations(s.Id, null, language))
};

View File

@ -8,5 +8,10 @@
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
"AllowedHosts": "*",
"ConnectionStrings": {
//"SurveyConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;"
//"SurveyConnection": "Server=localhost,1433;Database=da_survey_dev;User Id=sa;Password=Password123;TrustServerCertificate=True;",
"SurveyConnection": "Server=207.180.248.35;Database=da_survey_dev;User Id=sa;Password=YourStrongPassw0rd;TrustServerCertificate=True;"
}
}

View File

@ -0,0 +1,147 @@
using DamageAssesment.Api.UsersAccess.Db;
using DamageAssesment.Api.UsersAccess.Interfaces;
using DamageAssesment.Api.UsersAccess.Providers;
using DamageAssesment.Api.UsersAccess.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using Polly;
using DamageAssesment.Api.UsersAccess.Services;
using Microsoft.OpenApi.Models;
using System.Reflection;
using Microsoft.AspNetCore.Authorization;
const int maxApiCallRetries = 3;
const int intervalToRetry = 2; //2 seconds
const int maxRetryForCircuitBraker = 5;
const int intervalForCircuitBraker = 5; //5 seconds
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
builder.Services.AddAuthentication().
AddJwtBearer("DamageApp", item =>
{
item.RequireHttpsMetadata = true;
item.SaveToken = true;
item.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
ValidateIssuer = false,
ValidateAudience = false,
ClockSkew = TimeSpan.Zero
};
}).AddJwtBearer("Dadeschools", options =>
{
options.Authority = builder.Configuration["Dadeschools:Authority"];
options.TokenValidationParameters.ValidTypes = new[] { "at+jwt" };
options.TokenValidationParameters.ValidateAudience = false;
});
builder.Services.AddAuthorization(options =>
{
var DamageAppPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("DamageApp")
.Build();
var DadeschoolsPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Dadeschools")
.Build();
var allPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("DamageApp", "Dadeschools")
.Build();
options.AddPolicy("DamageApp", DamageAppPolicy);
options.AddPolicy("Dadeschools", DadeschoolsPolicy);
options.AddPolicy("AllPolicies", allPolicy);
options.DefaultPolicy = options.GetPolicy("DamageApp")!;
});
var _jwtsettings = builder.Configuration.GetSection("JwtSettings");
builder.Services.Configure<JwtSettings>(_jwtsettings);
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddScoped<IUsersAccessProvider, UsersAccessProvider>();
builder.Services.AddScoped<ITokenServiceProvider, TokenServiceProvider>();
builder.Services.AddScoped<IEmployeeServiceProvider, EmployeeServiceProvider>();
builder.Services.AddHttpClient<IHttpUtil, HttpUtil>().
AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(maxApiCallRetries, _ => TimeSpan.FromSeconds(intervalToRetry))).
AddTransientHttpErrorPolicy(policy => policy.CircuitBreakerAsync(maxRetryForCircuitBraker, TimeSpan.FromSeconds(intervalForCircuitBraker)));
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
builder.Services.AddSwaggerGen(options =>
{
// Include XML comments from your assembly
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
//options.IncludeXmlComments(xmlPath);
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
{
Name = "Bearer",
BearerFormat = "JWT",
Scheme = "bearer",
Description = "Specify the authorization token.",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
};
options.AddSecurityDefinition("jwt_auth", securityDefinition);
// Make sure swagger UI requires a Bearer token specified
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
{
Reference = new OpenApiReference()
{
Id = "jwt_auth",
Type = ReferenceType.SecurityScheme
}
};
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
{
{securityScheme, new string[] { }},
};
options.AddSecurityRequirement(securityRequirements);
});
builder.Services.AddDbContext<UsersAccessDbContext>(option =>
{
option.UseInMemoryDatabase("UsersAccess");
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
using (var serviceScope = app.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
var usersAccessProvider = services.GetRequiredService<IUsersAccessProvider>();
usersAccessProvider.seedData();
}
}
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@ -11,6 +11,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Attachm
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4CB40DC2-D9D2-4384-A7A6-9968F5C777A2}"
ProjectSection(SolutionItems) = preProject
..\..\..\..\Sample\Migrations.ps1 = ..\..\..\..\Sample\Migrations.ps1
ReadMe.txt = ReadMe.txt
ReadMe4Dev.txt = ReadMe4Dev.txt
EndProjectSection
@ -33,13 +34,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Employe
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Employees.Test", "DamageAssesment.Api.Employees.Test\DamageAssesment.Api.Employees.Test.csproj", "{D6BF9AE9-72FA-4726-A326-35A35D27FFB8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks", "DamageAssesment.Api.DocuLinks\DamageAssesment.Api.DocuLinks.csproj", "{D356A3C9-B275-4B1A-9B1B-F48600E85E4F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks.Test", "DamageAssesment.Api.DocuLinks.Test\DamageAssesment.Api.DocuLinks.Test.csproj", "{A7F17ED7-71D2-4FD0-87E5-D83415078FC0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Responses", "DamageAssesment.Api.Responses\DamageAssesment.Api.Responses.csproj", "{C7F1C88B-B3C1-406E-A741-1D9A07ED18C0}"
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{0DD44934-6826-43C8-A438-320A05209967}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Responses.Test", "DamageAssesment.Api.Responses.Test\DamageAssesment.Api.Responses.Test.csproj", "{26BFCF59-0D24-41C1-9202-D4FFCC52389B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks", "DamageAssesment.Api.DocuLinks\DamageAssesment.Api.DocuLinks.csproj", "{B027FBB9-1357-4FD6-85B3-8ADCE11CAE05}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Responses", "DamageAssesment.Api.Responses\DamageAssesment.Api.Responses.csproj", "{B5C446DF-30DF-46E3-BD87-DA454C8B9C4F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Responses.Test", "DamageAssesment.Api.Responses.Test\DamageAssesment.Api.Responses.Test.csproj", "{22014966-BF3D-463A-B561-46635BE75C89}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -95,22 +98,26 @@ Global
{D6BF9AE9-72FA-4726-A326-35A35D27FFB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6BF9AE9-72FA-4726-A326-35A35D27FFB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6BF9AE9-72FA-4726-A326-35A35D27FFB8}.Release|Any CPU.Build.0 = Release|Any CPU
{D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Release|Any CPU.Build.0 = Release|Any CPU
{A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Release|Any CPU.Build.0 = Release|Any CPU
{C7F1C88B-B3C1-406E-A741-1D9A07ED18C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7F1C88B-B3C1-406E-A741-1D9A07ED18C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7F1C88B-B3C1-406E-A741-1D9A07ED18C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7F1C88B-B3C1-406E-A741-1D9A07ED18C0}.Release|Any CPU.Build.0 = Release|Any CPU
{26BFCF59-0D24-41C1-9202-D4FFCC52389B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{26BFCF59-0D24-41C1-9202-D4FFCC52389B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26BFCF59-0D24-41C1-9202-D4FFCC52389B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26BFCF59-0D24-41C1-9202-D4FFCC52389B}.Release|Any CPU.Build.0 = Release|Any CPU
{0DD44934-6826-43C8-A438-320A05209967}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0DD44934-6826-43C8-A438-320A05209967}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0DD44934-6826-43C8-A438-320A05209967}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0DD44934-6826-43C8-A438-320A05209967}.Release|Any CPU.Build.0 = Release|Any CPU
{B027FBB9-1357-4FD6-85B3-8ADCE11CAE05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B027FBB9-1357-4FD6-85B3-8ADCE11CAE05}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B027FBB9-1357-4FD6-85B3-8ADCE11CAE05}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B027FBB9-1357-4FD6-85B3-8ADCE11CAE05}.Release|Any CPU.Build.0 = Release|Any CPU
{B5C446DF-30DF-46E3-BD87-DA454C8B9C4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B5C446DF-30DF-46E3-BD87-DA454C8B9C4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B5C446DF-30DF-46E3-BD87-DA454C8B9C4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5C446DF-30DF-46E3-BD87-DA454C8B9C4F}.Release|Any CPU.Build.0 = Release|Any CPU
{22014966-BF3D-463A-B561-46635BE75C89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{22014966-BF3D-463A-B561-46635BE75C89}.Debug|Any CPU.Build.0 = Debug|Any CPU
{22014966-BF3D-463A-B561-46635BE75C89}.Release|Any CPU.ActiveCfg = Release|Any CPU
{22014966-BF3D-463A-B561-46635BE75C89}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,18 +0,0 @@
trigger:
- '*'
pr:
- '*'
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- script: |
#!/bin/bash
chmod +x ./Scripts/build_and_push_services2acr.sh
./Scripts/build_and_push_services2acr.sh
displayName: 'Run build_and_push_services2acr.sh'

View File

@ -0,0 +1,75 @@
version: '3.4'
services:
damageassesment.api.answers:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapianswers
build:
context: .
dockerfile: DamageAssesment.Api.Answers/Dockerfile
ports:
- "6001:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapianswers"
damageassesment.api.attachments:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapiattachments
build:
context: .
dockerfile: DamageAssesment.Api.Attachments/Dockerfile
ports:
- "6001:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapiattachments"
damageassesment.api.employees:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapiemployees
build:
context: .
dockerfile: DamageAssesment.Api.Employees/Dockerfile
ports:
- "6003:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapiemployees"
damageassesment.api.locations:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapilocations
build:
context: .
dockerfile: DamageAssesment.Api.Locations/Dockerfile
ports:
- "6004:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapilocations"
damageassesment.api.questions:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapiquestions
build:
context: .
dockerfile: DamageAssesment.Api.Questions/Dockerfile
ports:
- "6005:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapiquestions"
damageassesment.api.surveys:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapisurveys
build:
context: .
dockerfile: DamageAssesment.Api.Surveys/Dockerfile
ports:
- "6006:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapisurveys"
damageassesment.api.doculinks:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapidoculinks
build:
context: .
dockerfile: DamageAssesment.Api.DocuLinks/Dockerfile
ports:
- "6008:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapidoculinks"
damageassesment.api.responses:
image: dadeschoolscontainerregistry.azurecr.io/damageassesmentapiresponses
build:
context: .
dockerfile: DamageAssesment.Api.Responses/Dockerfile
ports:
- "6007:80"
command: bash -c "docker push dadeschoolscontainerregistry.azurecr.io/damageassesmentapiresponses"

View File

@ -0,0 +1,80 @@
version: '3.4'
services:
answers:
image: santhoshsnair/damageassesmentapianswers:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6001:80"
attachments:
image: santhoshsnair/damageassesmentapiattachments:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6002:80"
employees:
image: santhoshsnair/damageassesmentapiemployees:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6003:80"
locations:
image: santhoshsnair/damageassesmentapilocations:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6004:80"
questions:
image: santhoshsnair/damageassesmentapiquestions:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6005:80"
responses:
image: santhoshsnair/damageassesmentapisurveyresponses:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
- services__Answers=http://10.0.0.4:19081/dasapp/answers/
- services__Locations=http://10.0.0.4:19081/dasapp/locations/
- services__Questions=http://10.0.0.4:19081/dasapp/questions/
- services__Employees=http://10.0.0.4:19081/dasapp/employees/
- services__Attachments=http://10.0.0.4:19081/dasapp/attachments/
- services__Surveys=http://10.0.0.4:19081/dasapp/survey/
ports:
- "6006:80"
surveys:
image: santhoshsnair/damageassesmentapisurveys:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6007:80"
doculinks:
image: santhoshsnair/damageassesmentapidoculinks:latest
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6009:80"
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
environment:
- SA_PASSWORD=your_password
- ACCEPT_EULA=Y
ports:
- "1433:1433"
volumes:
- ./sql_data:/var/opt/mssql/data

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
<PropertyGroup Label="Globals">
<ProjectVersion>2.1</ProjectVersion>
<DockerTargetOS>Linux</DockerTargetOS>
<ProjectGuid>0dd44934-6826-43c8-a438-320a05209967</ProjectGuid>
<DockerLaunchAction>LaunchBrowser</DockerLaunchAction>
<DockerServiceUrl>{Scheme}://localhost:{ServicePort}/swagger</DockerServiceUrl>
<DockerServiceName>damageassesment.api.answers</DockerServiceName>
</PropertyGroup>
<ItemGroup>
<None Include="docker-compos.tst.yml" />
<None Include="docker-compose.sql.yml" />
<None Include="docker-compose.asf.yml" />
<None Include="docker-compose.override.yml">
<DependentUpon>docker-compose.yml</DependentUpon>
</None>
<None Include="docker-compose.yml" />
<None Include=".dockerignore" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,66 @@
version: '3.4'
services:
damageassesment.api.answers:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6001:80"
damageassesment.api.attachments:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6002:80"
damageassesment.api.employees:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6003:80"
damageassesment.api.locations:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6004:80"
damageassesment.api.questions:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6005:80"
damageassesment.api.responses:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- services__Answers=http://damageassesment.api.answers:80
- services__Locations=http://damageassesment.api.locations:80
- services__Questions=http://damageassesment.api.questions:80
- services__Employees=http://damageassesment.api.employees:80
- services__Attachments=http://damageassesment.api.attachments:80
- services__Surveys=http://damageassesment.api.survey:80
ports:
- "6006:80"
damageassesment.api.surveys:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6007:80"
damageassesment.api.doculinks:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "6009:80"

View File

@ -0,0 +1,13 @@
version: '3.4'
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
environment:
- SA_PASSWORD=Test123
- ACCEPT_EULA=Y
ports:
- "1433:1433"
volumes:
- ./data:/var/opt/mssql # Mount a volume to persist data

View File

@ -0,0 +1,57 @@
version: '3.4'
services:
damageassesment.api.answers:
image: ${DOCKER_REGISTRY-}damageassesmentapianswers
build:
context: .
dockerfile: DamageAssesment.Api.Answers/Dockerfile
damageassesment.api.attachments:
image: ${DOCKER_REGISTRY-}damageassesmentapiattachments
build:
context: .
dockerfile: DamageAssesment.Api.Attachments/Dockerfile
damageassesment.api.employees:
image: ${DOCKER_REGISTRY-}damageassesmentapiemployees
build:
context: .
dockerfile: DamageAssesment.Api.Employees/Dockerfile
damageassesment.api.locations:
image: ${DOCKER_REGISTRY-}damageassesmentapilocations
build:
context: .
dockerfile: DamageAssesment.Api.Locations/Dockerfile
damageassesment.api.questions:
image: ${DOCKER_REGISTRY-}damageassesmentapiquestions
build:
context: .
dockerfile: DamageAssesment.Api.Questions/Dockerfile
damageassesment.api.surveys:
image: ${DOCKER_REGISTRY-}damageassesmentapisurveys
build:
context: .
dockerfile: DamageAssesment.Api.Surveys/Dockerfile
damageassesment.api.doculinks:
image: ${DOCKER_REGISTRY-}damageassesmentapidoculinks
build:
context: .
dockerfile: DamageAssesment.Api.DocuLinks/Dockerfile
damageassesment.api.responses:
image: ${DOCKER_REGISTRY-}damageassesmentapiresponses
build:
context: .
dockerfile: DamageAssesment.Api.Responses/Dockerfile

View File

@ -0,0 +1,19 @@
{
"profiles": {
"Docker Compose": {
"commandName": "DockerCompose",
"commandVersion": "1.0",
"serviceActions": {
"damageassesment.api.answers": "StartDebugging",
"damageassesment.api.attachments": "StartDebugging",
"damageassesment.api.employees": "StartDebugging",
"damageassesment.api.locations": "StartDebugging",
"damageassesment.api.questions": "StartDebugging",
"damageassesment.api.surveyresponses": "StartDebugging",
"damageassesment.api.surveys": "StartDebugging",
"damageassesment.api.doculinks": "StartDebugging",
"damageassesment.api.responses": "StartDebugging"
}
}
}
}

View File

@ -1,30 +0,0 @@
# powershell -ExecutionPolicy Bypass -File .\build_and_push_services2acr.ps1
# Specify the path to your docker-compose.yml
$composeFile = "C:\Users\santh\OneDrive\Desktop\DOCKERS\ubuntu\Sprint6\C1011\Backend-API-Services\DamageAssesmentApi\docker-compose.yml"
# List of services to build, tag, and push
$services = @(
"damageassesmentapianswers",
"damageassesmentapiattachments",
"damageassesmentapiemployees",
"damageassesmentapilocations",
"damageassesmentapiquestions",
"damageassesmentapisurveys",
"damageassesmentapidoculinks",
"damageassesmentapiresponses"
)
# Log in to ACR (replace ACR_USERNAME and ACR_PASSWORD)
docker login dadeschoolscontainerregistry.azurecr.io -u dadeSchoolsContainerRegistry -p k1f8hE0O5hj3tYCCR/5stNrkw5BZoTmAqid/hvaVo8+ACRDc2Arn
# Loop through the services and build, tag, and push
foreach ($service in $services) {
# Build the service
docker-compose -f $composeFile build $service
# Tag the image for ACR
docker tag "$service" "dadeschoolscontainerregistry.azurecr.io/$service"
# Push the image to ACR
docker push "dadeschoolscontainerregistry.azurecr.io/$service"
}

View File

@ -1,39 +0,0 @@
#!/bin/bash
# Determine the current directory (where the script is located)
script_directory="$( cd "$(dirname "$0")" ; pwd -P )"
# Use the 'find' command to locate the 'docker-compose.yml' file within the repository directory
composeFile=$(find "$script_directory/.." -name "docker-compose.yml" -type f | head -n 1)
if [ -z "$composeFile" ]; then
echo "docker-compose.yml not found."
exit 1
fi
# List of services to build, tag, and push
services=(
"damageassesmentapianswers"
"damageassesmentapiattachments"
"damageassesmentapiemployees"
"damageassesmentapilocations"
"damageassesmentapiquestions"
"damageassesmentapisurveys"
"damageassesmentapidoculinks"
"damageassesmentapiresponses"
)
# Log in to ACR (replace ACR_USERNAME and ACR_PASSWORD)
docker login dadeschoolscontainerregistry.azurecr.io -u dadeSchoolsContainerRegistry -p k1f8hE0O5hj3tYCCR/5stNrkw5BZoTmAqid/hvaVo8+ACRDc2Arn
# Loop through the services and build, tag, and push
for service in "${services[@]}"; do
# Build the service
docker-compose -f "$composeFile" build "$service"
# Tag the image for ACR
docker tag "$service" "dadeschoolscontainerregistry.azurecr.io/$service"
# Push the image to ACR
docker push "dadeschoolscontainerregistry.azurecr.io/$service"
done

39
db/migrate-sqldb_v1.ps1 Normal file
View File

@ -0,0 +1,39 @@
# Define the path to your application's root directory
$applicationRoot = "C:\Users\santh\OneDrive\Desktop\DOCKERS\ubuntu\Sprint6\C1011\Backend-API-Services\DamageAssesmentApi\"
#To execute: powershell -ExecutionPolicy Bypass -File .\migrate-sqldb.ps1
# Define the list of microservice directories
$microservices = @(
"DamageAssesment.Api.Answers",
"DamageAssesment.Api.Attachments",
"DamageAssesment.Api.DocuLinks",
"DamageAssesment.Api.Employees",
"DamageAssesment.Api.Locations",
"DamageAssesment.Api.Questions",
"DamageAssesment.Api.Responses",
"DamageAssesment.Api.Surveys"
)
# Define the migration name with the current date and time
$migrationName = "Migration_" + (Get-Date -Format "yyyyMMdd_HHmmss")
# Function to run migrations for a microservice
Function Run-Migrations {
param (
[string]$microservicePath
)
Write-Host "Running Migrations for $microservicePath..."
Set-Location -Path $microservicePath
dotnet ef migrations add $migrationName
dotnet ef database update
Write-Host "Migrations for $microservicePath completed."
}
# Run migrations for each microservice
$microservices | ForEach-Object {
$microservicePath = Join-Path -Path $applicationRoot -ChildPath $_
Run-Migrations -microservicePath $microservicePath
}
Write-Host "All Migrations Completed."