Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 37 additions & 37 deletions data/createdatabase.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,114 +2,114 @@ USE [master]
GO

/****** Object: Database [sql101.firstname.lastname] Script Date: 1/21/2019 9:11:50 PM ******/
CREATE DATABASE [sql101.firstname.lastname]
CREATE DATABASE [sql101.castello.govender]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'sql101.firstname.lastname', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\sql101.firstname.lastname.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
( NAME = N'sql101.castello.govender', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\sql101.castello.govender.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
LOG ON
( NAME = N'sql101.firstname.lastname_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\sql101.firstname.lastname_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
( NAME = N'sql101.castello.govender_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\sql101.castello.govender_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO

ALTER DATABASE [sql101.firstname.lastname] SET COMPATIBILITY_LEVEL = 130
ALTER DATABASE [sql101.castello.govender] SET COMPATIBILITY_LEVEL = 130
GO

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [sql101.firstname.lastname].[dbo].[sp_fulltext_database] @action = 'enable'
EXEC [sql101.castello.govender].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE [sql101.castello.govender] SET ANSI_NULL_DEFAULT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_NULLS OFF
ALTER DATABASE [sql101.castello.govender] SET ANSI_NULLS OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_PADDING OFF
ALTER DATABASE [sql101.castello.govender] SET ANSI_PADDING OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_WARNINGS OFF
ALTER DATABASE [sql101.castello.govender] SET ANSI_WARNINGS OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ARITHABORT OFF
ALTER DATABASE [sql101.castello.govender] SET ARITHABORT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_CLOSE OFF
ALTER DATABASE [sql101.castello.govender] SET AUTO_CLOSE OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_SHRINK OFF
ALTER DATABASE [sql101.castello.govender] SET AUTO_SHRINK OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [sql101.castello.govender] SET AUTO_UPDATE_STATISTICS ON
GO

ALTER DATABASE [sql101.firstname.lastname] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [sql101.castello.govender] SET CURSOR_CLOSE_ON_COMMIT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET CURSOR_DEFAULT GLOBAL
ALTER DATABASE [sql101.castello.govender] SET CURSOR_DEFAULT GLOBAL
GO

ALTER DATABASE [sql101.firstname.lastname] SET CONCAT_NULL_YIELDS_NULL OFF
ALTER DATABASE [sql101.castello.govender] SET CONCAT_NULL_YIELDS_NULL OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [sql101.castello.govender] SET NUMERIC_ROUNDABORT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET QUOTED_IDENTIFIER OFF
ALTER DATABASE [sql101.castello.govender] SET QUOTED_IDENTIFIER OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [sql101.castello.govender] SET RECURSIVE_TRIGGERS OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET DISABLE_BROKER
ALTER DATABASE [sql101.castello.govender] SET DISABLE_BROKER
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ALTER DATABASE [sql101.castello.govender] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET DATE_CORRELATION_OPTIMIZATION OFF
ALTER DATABASE [sql101.castello.govender] SET DATE_CORRELATION_OPTIMIZATION OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET TRUSTWORTHY OFF
ALTER DATABASE [sql101.castello.govender] SET TRUSTWORTHY OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ALLOW_SNAPSHOT_ISOLATION OFF
ALTER DATABASE [sql101.castello.govender] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET PARAMETERIZATION SIMPLE
ALTER DATABASE [sql101.castello.govender] SET PARAMETERIZATION SIMPLE
GO

ALTER DATABASE [sql101.firstname.lastname] SET READ_COMMITTED_SNAPSHOT OFF
ALTER DATABASE [sql101.castello.govender] SET READ_COMMITTED_SNAPSHOT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET HONOR_BROKER_PRIORITY OFF
ALTER DATABASE [sql101.castello.govender] SET HONOR_BROKER_PRIORITY OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET RECOVERY FULL
ALTER DATABASE [sql101.castello.govender] SET RECOVERY FULL
GO

ALTER DATABASE [sql101.firstname.lastname] SET MULTI_USER
ALTER DATABASE [sql101.castello.govender] SET MULTI_USER
GO

ALTER DATABASE [sql101.firstname.lastname] SET PAGE_VERIFY CHECKSUM
ALTER DATABASE [sql101.castello.govender] SET PAGE_VERIFY CHECKSUM
GO

ALTER DATABASE [sql101.firstname.lastname] SET DB_CHAINING OFF
ALTER DATABASE [sql101.castello.govender] SET DB_CHAINING OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
ALTER DATABASE [sql101.castello.govender] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO

ALTER DATABASE [sql101.firstname.lastname] SET TARGET_RECOVERY_TIME = 60 SECONDS
ALTER DATABASE [sql101.castello.govender] SET TARGET_RECOVERY_TIME = 60 SECONDS
GO

ALTER DATABASE [sql101.firstname.lastname] SET DELAYED_DURABILITY = DISABLED
ALTER DATABASE [sql101.castello.govender] SET DELAYED_DURABILITY = DISABLED
GO

ALTER DATABASE [sql101.firstname.lastname] SET QUERY_STORE = OFF
ALTER DATABASE [sql101.castello.govender] SET QUERY_STORE = OFF
GO

USE [sql101.firstname.lastname]
USE [sql101.castello.govender]
GO

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF;
Expand All @@ -124,7 +124,7 @@ GO
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF;
GO

ALTER DATABASE [sql101.firstname.lastname] SET READ_WRITE
ALTER DATABASE [sql101.castello.govender] SET READ_WRITE
GO


12 changes: 6 additions & 6 deletions data/createuser.sql
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
USE [master]
GO
CREATE LOGIN [firstnamelastname] WITH PASSWORD=N'rabbit123!@#' MUST_CHANGE, DEFAULT_DATABASE=[sql101.firstname.lastname], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
CREATE LOGIN [castellogovender] WITH PASSWORD=N'rabbit123!@#' MUST_CHANGE, DEFAULT_DATABASE=[sql101.castello.govender], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
use [sql101.firstname.lastname]
use [sql101.castello.govender]

GO
use [master]

GO
USE [sql101.firstname.lastname]
USE [sql101.castello.govender]
GO
CREATE USER [firstnamelastname] FOR LOGIN [firstnamelastname]
CREATE USER [castellogovender] FOR LOGIN [castellogovender]
GO
USE [sql101.firstname.lastname]
USE [sql101.castello.govender]
GO
ALTER ROLE [db_owner] ADD MEMBER [firstnamelastname]
ALTER ROLE [db_owner] ADD MEMBER [castellogovender]
GO
21 changes: 21 additions & 0 deletions src/MyTimesheet/MyTimesheet/CacheSecrets.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>

<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<!--
<system.webServer>
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
-->


<appSettings >
<add key="CacheConnection" value="101.redis.cache.windows.net.redis.cache.windows.net,abortConnect=false,ssl=true,password=85BYRVqUHV6aW7Jz8zIIxRnaYMgbBd2kwo4bpDiz4vw="/>
</appSettings>

</configuration>
107 changes: 107 additions & 0 deletions src/MyTimesheet/MyTimesheet/Controllers/EmployeesController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MyTimesheet.Models;

namespace MyTimesheet.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EmployeesController : ControllerBase
{
private readonly TimesheetContext _context;
readonly IConfiguration _config;
public EmployeesController(TimesheetContext context, IConfiguration config)
{
_context = context;
_config = config;
}

// GET: api/Employees
[HttpGet]
public async Task<ActionResult<IEnumerable<Employee>>> GetEmployee()
{
return await _context.Employee.ToListAsync();
}

// GET: api/Employees/5
[HttpGet("{id}")]
public async Task<ActionResult<Employee>> GetEmployee(int id)
{
var employee = await _context.Employee.FindAsync(id);

if (employee == null)
{
return NotFound();
}

return employee;
}

// PUT: api/Employees/5
[HttpPut("{id}")]
public async Task<IActionResult> PutEmployee(int id, Employee employee)
{
if (id != employee.Id)
{
return BadRequest();
}

_context.Entry(employee).State = EntityState.Modified;

try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!EmployeeExists(id))
{
return NotFound();
}
else
{
throw;
}
}

return NoContent();
}

// POST: api/Employees
[HttpPost]
public async Task<ActionResult<Employee>> PostEmployee(Employee employee)
{
_context.Employee.Add(employee);
await _context.SaveChangesAsync();

return CreatedAtAction("GetEmployee", new { id = employee.Id }, employee);
}

// DELETE: api/Employees/5
[HttpDelete("{id}")]
public async Task<ActionResult<Employee>> DeleteEmployee(int id)
{
var employee = await _context.Employee.FindAsync(id);
if (employee == null)
{
return NotFound();
}

_context.Employee.Remove(employee);
await _context.SaveChangesAsync();

return employee;
}

private bool EmployeeExists(int id)
{
return _context.Employee.Any(e => e.Id == id);
}
}
}
42 changes: 39 additions & 3 deletions src/MyTimesheet/MyTimesheet/Controllers/TimesheetController.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MyTimesheet.Models;
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
Expand All @@ -13,9 +16,11 @@ namespace MyTimesheet.Controllers
public class TimesheetController : ControllerBase
{
private readonly TimesheetContext _db;
public TimesheetController(TimesheetContext context)
readonly IConfiguration _config;
public TimesheetController(TimesheetContext context, IConfiguration config)
{
_db = context;
_config = config;
}

// GET api/values
Expand All @@ -34,19 +39,50 @@ public async Task<ActionResult<TimesheetEntry>> Get(int id)

// POST api/values
[HttpPost]
public async Task Post([FromBody] TimesheetEntry value)
public async Task<string> Post([FromBody] TimesheetEntry value)
{
await _db.Entries.AddAsync(value);
await _db.SaveChangesAsync();

var cacheConnection = _config.GetValue<string>("CacheConnection").ToString();
var lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect(cacheConnection);
});

IDatabase cache = lazyConnection.Value.GetDatabase();
var serializeddata = JsonConvert.SerializeObject(value);
await cache.StringSetAsync($"{value.EmployeeId}",serializeddata);

var cacheItem = await cache.StringGetAsync($"{value.EmployeeId}");

lazyConnection.Value.Dispose();

return cacheItem;
}

// PUT api/values/5
[HttpPut("{id}")]
public async Task Put(int id, [FromBody] TimesheetEntry value)
public async Task<string> Put(int id, [FromBody] TimesheetEntry value)
{
var entry = await _db.Entries.FindAsync(id);
entry = value;
await _db.SaveChangesAsync();

var lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{

return ConnectionMultiplexer.Connect(_config.GetValue<string>("CacheConnection"));
});

IDatabase cache = lazyConnection.Value.GetDatabase();

var cacheItem = await cache.StringGetAsync($"{id}");
var serializeddata = JsonConvert.SerializeObject(value);
await cache.StringSetAsync($"{value.Id}", serializeddata);
lazyConnection.Value.Dispose();

return JsonConvert.SerializeObject(value);
}

// DELETE api/values/5
Expand Down
Loading