Add Docker Compose and backend Dockerfile

Include .gitignore, go.mod/go.sum, initial Go source, init.sql, and
Docker‑Compose
configuration for the MSSQL and backend services.
This commit is contained in:
2026-01-18 14:56:59 -05:00
parent fb3e983eff
commit fa1ad45ed8
12 changed files with 516 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
59629046-e974-4356-ba63-5f0605022367
9979554600398963173
3457

View File

View File

Binary file not shown.

View File

Binary file not shown.

223
db/init.sql Normal file
View File

@@ -0,0 +1,223 @@
-- init.sql: Create CustomerDB schema, tables, types, procedures, and views.
-- ------------------------------------------------------------
-- Create the database
-- ------------------------------------------------------------
IF DB_ID(N'CustomerDB') IS NULL
BEGIN
CREATE DATABASE CustomerDB;
END
GO
USE CustomerDB;
GO
-- ------------------------------------------------------------
-- Types / Lookup tables
-- ------------------------------------------------------------
CREATE TABLE dbo.ContactTypes (
ContactTypeID INT IDENTITY(1,1) PRIMARY KEY,
TypeName NVARCHAR(50) NOT NULL UNIQUE
);
GO
INSERT INTO dbo.ContactTypes (TypeName) VALUES
(N'Phone'),
(N'Email'),
(N'Fax'),
(N'Website');
GO
-- ------------------------------------------------------------
-- Core tables
-- ------------------------------------------------------------
CREATE TABLE dbo.Customers (
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
CustomerName NVARCHAR(150) NOT NULL,
AddressLine1 NVARCHAR(200) NULL,
AddressLine2 NVARCHAR(200) NULL,
City NVARCHAR(100) NULL,
State NVARCHAR(100) NULL,
ZipCode NVARCHAR(20) NULL,
Country NVARCHAR(100) NULL,
CreatedAt DATETIME2(0) NOT NULL CONSTRAINT DF_Customers_CreatedAt DEFAULT (SYSDATETIME()),
UpdatedAt DATETIME2(0) NULL
);
GO
CREATE TABLE dbo.Contacts (
ContactID INT IDENTITY(1,1) PRIMARY KEY,
CustomerID INT NOT NULL,
ContactTypeID INT NOT NULL,
ContactValue NVARCHAR(200) NOT NULL,
IsPrimary BIT NOT NULL CONSTRAINT DF_Contacts_IsPrimary DEFAULT (0),
CreatedAt DATETIME2(0) NOT NULL CONSTRAINT DF_Contacts_CreatedAt DEFAULT (SYSDATETIME()),
UpdatedAt DATETIME2(0) NULL,
CONSTRAINT FK_Contacts_Customers FOREIGN KEY (CustomerID) REFERENCES dbo.Customers(CustomerID) ON DELETE CASCADE,
CONSTRAINT FK_Contacts_ContactTypes FOREIGN KEY (ContactTypeID) REFERENCES dbo.ContactTypes(ContactTypeID)
);
GO
-- ------------------------------------------------------------
-- Stored procedures for Customers
-- ------------------------------------------------------------
CREATE PROCEDURE dbo.sp_InsertCustomer
@CustomerName NVARCHAR(150),
@AddressLine1 NVARCHAR(200) = NULL,
@AddressLine2 NVARCHAR(200) = NULL,
@City NVARCHAR(100) = NULL,
@State NVARCHAR(100) = NULL,
@ZipCode NVARCHAR(20) = NULL,
@Country NVARCHAR(100) = NULL,
@NewCustomerID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.Customers (CustomerName, AddressLine1, AddressLine2, City, State, ZipCode, Country)
VALUES (@CustomerName, @AddressLine1, @AddressLine2, @City, @State, @ZipCode, @Country);
SET @NewCustomerID = SCOPE_IDENTITY();
END
GO
CREATE PROCEDURE dbo.sp_GetCustomer
@CustomerID INT
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM dbo.Customers
WHERE CustomerID = @CustomerID;
END
GO
CREATE PROCEDURE dbo.sp_UpdateCustomer
@CustomerID INT,
@CustomerName NVARCHAR(150),
@AddressLine1 NVARCHAR(200) = NULL,
@AddressLine2 NVARCHAR(200) = NULL,
@City NVARCHAR(100) = NULL,
@State NVARCHAR(100) = NULL,
@ZipCode NVARCHAR(20) = NULL,
@Country NVARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE dbo.Customers
SET CustomerName = @CustomerName,
AddressLine1 = @AddressLine1,
AddressLine2 = @AddressLine2,
City = @City,
State = @State,
ZipCode = @ZipCode,
Country = @Country,
UpdatedAt = SYSDATETIME()
WHERE CustomerID = @CustomerID;
END
GO
CREATE PROCEDURE dbo.sp_DeleteCustomer
@CustomerID INT
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.Customers WHERE CustomerID = @CustomerID;
END
GO
-- ------------------------------------------------------------
-- Stored procedures for Contacts
-- ------------------------------------------------------------
CREATE PROCEDURE dbo.sp_InsertContact
@CustomerID INT,
@ContactTypeID INT,
@ContactValue NVARCHAR(200),
@IsPrimary BIT = 0,
@NewContactID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.Contacts (CustomerID, ContactTypeID, ContactValue, IsPrimary)
VALUES (@CustomerID, @ContactTypeID, @ContactValue, @IsPrimary);
SET @NewContactID = SCOPE_IDENTITY();
END
GO
CREATE PROCEDURE dbo.sp_GetContactsByCustomer
@CustomerID INT
AS
BEGIN
SET NOCOUNT ON;
SELECT c.*, ct.TypeName
FROM dbo.Contacts c
JOIN dbo.ContactTypes ct ON c.ContactTypeID = ct.ContactTypeID
WHERE c.CustomerID = @CustomerID;
END
GO
CREATE PROCEDURE dbo.sp_UpdateContact
@ContactID INT,
@ContactTypeID INT,
@ContactValue NVARCHAR(200),
@IsPrimary BIT
AS
BEGIN
SET NOCOUNT ON;
UPDATE dbo.Contacts
SET ContactTypeID = @ContactTypeID,
ContactValue = @ContactValue,
IsPrimary = @IsPrimary,
UpdatedAt = SYSDATETIME()
WHERE ContactID = @ContactID;
END
GO
CREATE PROCEDURE dbo.sp_DeleteContact
@ContactID INT
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.Contacts WHERE ContactID = @ContactID;
END
GO
-- ------------------------------------------------------------
-- Views
-- ------------------------------------------------------------
CREATE VIEW dbo.vw_CustomerContacts AS
SELECT
cu.CustomerID,
cu.CustomerName,
cu.AddressLine1,
cu.AddressLine2,
cu.City,
cu.State,
cu.ZipCode,
cu.Country,
ct.TypeName,
co.ContactValue,
co.IsPrimary
FROM dbo.Customers cu
LEFT JOIN dbo.Contacts co ON cu.CustomerID = co.CustomerID
LEFT JOIN dbo.ContactTypes ct ON co.ContactTypeID = ct.ContactTypeID;
GO
-- ------------------------------------------------------------
-- Sample data (optional, for quick testing)
-- ------------------------------------------------------------
INSERT INTO dbo.Customers (CustomerName, City, State, Country)
VALUES (N'Acme Corp', N'New York', N'NY', N'USA');
DECLARE @CustID INT = SCOPE_IDENTITY();
EXEC dbo.sp_InsertContact @CustomerID = @CustID,
@ContactTypeID = (SELECT ContactTypeID FROM dbo.ContactTypes WHERE TypeName = N'Phone'),
@ContactValue = N'555-1234',
@IsPrimary = 1,
@NewContactID = @CustID OUTPUT;
GO