225 lines
7.4 KiB
Transact-SQL
225 lines
7.4 KiB
Transact-SQL
-- ===========================================
|
|
-- SQL Server Setup Script for AccManager
|
|
-- Database: AccManager
|
|
-- Server: 172.20.235.176
|
|
-- ===========================================
|
|
|
|
-- Create Database
|
|
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'AccManager')
|
|
BEGIN
|
|
CREATE DATABASE AccManager;
|
|
PRINT 'Database AccManager created successfully.';
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
PRINT 'Database AccManager already exists.';
|
|
END
|
|
GO
|
|
|
|
USE AccManager;
|
|
GO
|
|
|
|
-- ===========================================
|
|
-- 1. CREATE USERS TABLE
|
|
-- ===========================================
|
|
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Users')
|
|
BEGIN
|
|
CREATE TABLE Users (
|
|
UserId INT PRIMARY KEY IDENTITY(1,1),
|
|
Username NVARCHAR(50) UNIQUE NOT NULL,
|
|
Password NVARCHAR(255) NOT NULL,
|
|
Email NVARCHAR(100),
|
|
FullName NVARCHAR(100),
|
|
Role NVARCHAR(50) NOT NULL,
|
|
Status NVARCHAR(20) DEFAULT 'Active',
|
|
CreatedDate DATETIME DEFAULT GETDATE(),
|
|
LastLogin DATETIME,
|
|
IsActive BIT DEFAULT 1
|
|
);
|
|
PRINT 'Table Users created successfully.';
|
|
END
|
|
|
|
-- ===========================================
|
|
-- 2. CREATE APPLICATIONS TABLE
|
|
-- ===========================================
|
|
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Applications')
|
|
BEGIN
|
|
CREATE TABLE Applications (
|
|
AppId INT PRIMARY KEY IDENTITY(1,1),
|
|
Name NVARCHAR(100) NOT NULL,
|
|
Type NVARCHAR(50),
|
|
Status NVARCHAR(20) DEFAULT 'online',
|
|
Icon NVARCHAR(50),
|
|
Description NVARCHAR(500),
|
|
CreatedDate DATETIME DEFAULT GETDATE(),
|
|
UpdatedDate DATETIME DEFAULT GETDATE()
|
|
);
|
|
PRINT 'Table Applications created successfully.';
|
|
END
|
|
|
|
-- ===========================================
|
|
-- 3. CREATE ACCOUNTS TABLE
|
|
-- ===========================================
|
|
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Accounts')
|
|
BEGIN
|
|
CREATE TABLE Accounts (
|
|
AccountId INT PRIMARY KEY IDENTITY(1,1),
|
|
UserId INT NOT NULL,
|
|
AppId INT NOT NULL,
|
|
AccountUsername NVARCHAR(100),
|
|
AccountPassword NVARCHAR(255),
|
|
Email NVARCHAR(100),
|
|
AccessLevel NVARCHAR(50),
|
|
Status NVARCHAR(20) DEFAULT 'Active',
|
|
Notes NVARCHAR(MAX),
|
|
CreatedDate DATETIME DEFAULT GETDATE(),
|
|
UpdatedDate DATETIME DEFAULT GETDATE(),
|
|
FOREIGN KEY (UserId) REFERENCES Users(UserId) ON DELETE CASCADE,
|
|
FOREIGN KEY (AppId) REFERENCES Applications(AppId) ON DELETE CASCADE
|
|
);
|
|
PRINT 'Table Accounts created successfully.';
|
|
END
|
|
|
|
-- ===========================================
|
|
-- 4. CREATE ASSET INVENTORY TABLE
|
|
-- ===========================================
|
|
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'AssetInventory')
|
|
BEGIN
|
|
CREATE TABLE AssetInventory (
|
|
AssetId INT PRIMARY KEY IDENTITY(1,1),
|
|
AssetCode NVARCHAR(100) NOT NULL UNIQUE,
|
|
AssetName NVARCHAR(255) NOT NULL,
|
|
Model NVARCHAR(255),
|
|
SerialNumber NVARCHAR(100),
|
|
Quantity INT NOT NULL DEFAULT 0,
|
|
ImportInPeriod INT NOT NULL DEFAULT 0,
|
|
ExportInPeriod INT NOT NULL DEFAULT 0,
|
|
EndingBalance INT NOT NULL DEFAULT 0,
|
|
Unit NVARCHAR(50),
|
|
Department NVARCHAR(100),
|
|
Project NVARCHAR(150),
|
|
Location NVARCHAR(150),
|
|
Custodian NVARCHAR(100),
|
|
Borrower NVARCHAR(255),
|
|
ExportedBy NVARCHAR(100),
|
|
PurchaseDate DATE NULL,
|
|
PurchasePrice DECIMAL(18,2) NULL,
|
|
Status NVARCHAR(30) NOT NULL DEFAULT 'in_use',
|
|
Notes NVARCHAR(MAX),
|
|
CreatedBy INT NULL,
|
|
CreatedDate DATETIME DEFAULT GETDATE(),
|
|
UpdatedDate DATETIME DEFAULT GETDATE(),
|
|
FOREIGN KEY (CreatedBy) REFERENCES Users(UserId) ON DELETE SET NULL
|
|
);
|
|
PRINT 'Table AssetInventory created successfully.';
|
|
END
|
|
|
|
IF COL_LENGTH('dbo.AssetInventory', 'Borrower') IS NULL
|
|
BEGIN
|
|
ALTER TABLE AssetInventory ADD Borrower NVARCHAR(255) NULL;
|
|
END
|
|
|
|
IF COL_LENGTH('dbo.AssetInventory', 'ExportedBy') IS NULL
|
|
BEGIN
|
|
ALTER TABLE AssetInventory ADD ExportedBy NVARCHAR(100) NULL;
|
|
END
|
|
|
|
-- ===========================================
|
|
-- 5. CREATE AUDIT LOG TABLE
|
|
-- ===========================================
|
|
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'AuditLog')
|
|
BEGIN
|
|
CREATE TABLE AuditLog (
|
|
LogId INT PRIMARY KEY IDENTITY(1,1),
|
|
UserId INT,
|
|
Action NVARCHAR(50),
|
|
TableName NVARCHAR(50),
|
|
RecordId INT,
|
|
OldValue NVARCHAR(MAX),
|
|
NewValue NVARCHAR(MAX),
|
|
Timestamp DATETIME DEFAULT GETDATE(),
|
|
FOREIGN KEY (UserId) REFERENCES Users(UserId)
|
|
);
|
|
PRINT 'Table AuditLog created successfully.';
|
|
END
|
|
|
|
-- ===========================================
|
|
-- 6. CREATE INDEXES
|
|
-- ===========================================
|
|
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_Users_Username')
|
|
BEGIN
|
|
CREATE INDEX IX_Users_Username ON Users(Username);
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_Accounts_UserId')
|
|
BEGIN
|
|
CREATE INDEX IX_Accounts_UserId ON Accounts(UserId);
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_Accounts_AppId')
|
|
BEGIN
|
|
CREATE INDEX IX_Accounts_AppId ON Accounts(AppId);
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_AssetInventory_AssetCode')
|
|
BEGIN
|
|
CREATE INDEX IX_AssetInventory_AssetCode ON AssetInventory(AssetCode);
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_AssetInventory_Status')
|
|
BEGIN
|
|
CREATE INDEX IX_AssetInventory_Status ON AssetInventory(Status);
|
|
END
|
|
|
|
PRINT 'Indexes created successfully.';
|
|
|
|
-- ===========================================
|
|
-- 7. INSERT INITIAL DATA
|
|
-- ===========================================
|
|
|
|
-- Check if admin user exists
|
|
IF NOT EXISTS (SELECT * FROM Users WHERE Username = 'admin')
|
|
BEGIN
|
|
INSERT INTO Users (Username, Password, Email, FullName, Role, Status, IsActive)
|
|
VALUES ('admin', 'admin', 'admin@accmanager.local', 'Administrator', 'admin', 'Active', 1);
|
|
PRINT 'Admin user created: Username=admin, Password=admin';
|
|
END
|
|
|
|
-- Insert sample applications
|
|
IF (SELECT COUNT(*) FROM Applications) = 0
|
|
BEGIN
|
|
INSERT INTO Applications (Name, Type, Status, Icon, Description)
|
|
VALUES
|
|
('AWS', 'Cloud', 'online', 'cloud', 'Amazon Web Services - Cloud Computing'),
|
|
('GitHub', 'VCS', 'online', 'code', 'GitHub - Version Control System'),
|
|
('Google Workspace', 'Collaboration', 'online', 'mail', 'Google Workspace - Email and Collaboration'),
|
|
('Nginx Proxy', 'Infra', 'offline', 'dns', 'Nginx - Web Server and Reverse Proxy');
|
|
PRINT 'Sample applications inserted successfully.';
|
|
END
|
|
|
|
-- ===========================================
|
|
-- 8. DISPLAY DATABASE INFORMATION
|
|
-- ===========================================
|
|
PRINT '';
|
|
PRINT '========================================';
|
|
PRINT 'DATABASE SETUP COMPLETED SUCCESSFULLY';
|
|
PRINT '========================================';
|
|
PRINT '';
|
|
PRINT 'Database Name: AccManager';
|
|
PRINT '';
|
|
PRINT 'Tables created:';
|
|
SELECT ' - ' + name AS TableName FROM sys.tables ORDER BY name;
|
|
PRINT '';
|
|
PRINT 'Users in system:';
|
|
SELECT ' Username: ' + Username + ' | Role: ' + Role + ' | Status: ' + Status AS UserInfo FROM Users;
|
|
PRINT '';
|
|
PRINT 'Applications available:';
|
|
SELECT ' - ' + Name + ' (' + Type + ') - ' + Status AS AppInfo FROM Applications ORDER BY Name;
|
|
PRINT '';
|
|
PRINT 'Login Credentials:';
|
|
PRINT ' Username: admin';
|
|
PRINT ' Password: admin';
|
|
PRINT ' Role: admin';
|
|
PRINT '';
|
|
PRINT '========================================';
|