Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Normalization and Redis work #25

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
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.Nombuso.Sibiya]
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.Nombuso.Sibiya', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\sql101.Nombuso.Sibiya.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.Nombuso.Sibiya_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\sql101.Nombuso.Sibiya_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO

ALTER DATABASE [sql101.firstname.lastname] SET COMPATIBILITY_LEVEL = 130
ALTER DATABASE [sql101.Nombuso.Sibiya] SET COMPATIBILITY_LEVEL = 130
GO

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

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET ANSI_NULL_DEFAULT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_NULLS OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET ANSI_NULLS OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_PADDING OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET ANSI_PADDING OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ANSI_WARNINGS OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET ANSI_WARNINGS OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ARITHABORT OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET ARITHABORT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_CLOSE OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET AUTO_CLOSE OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_SHRINK OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET AUTO_SHRINK OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [sql101.Nombuso.Sibiya] SET AUTO_UPDATE_STATISTICS ON
GO

ALTER DATABASE [sql101.firstname.lastname] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET CURSOR_CLOSE_ON_COMMIT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET CURSOR_DEFAULT GLOBAL
ALTER DATABASE [sql101.Nombuso.Sibiya] SET CURSOR_DEFAULT GLOBAL
GO

ALTER DATABASE [sql101.firstname.lastname] SET CONCAT_NULL_YIELDS_NULL OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET CONCAT_NULL_YIELDS_NULL OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET NUMERIC_ROUNDABORT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET QUOTED_IDENTIFIER OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET QUOTED_IDENTIFIER OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET RECURSIVE_TRIGGERS OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET DISABLE_BROKER
ALTER DATABASE [sql101.Nombuso.Sibiya] SET DISABLE_BROKER
GO

ALTER DATABASE [sql101.firstname.lastname] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET DATE_CORRELATION_OPTIMIZATION OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET DATE_CORRELATION_OPTIMIZATION OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET TRUSTWORTHY OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET TRUSTWORTHY OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET ALLOW_SNAPSHOT_ISOLATION OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET PARAMETERIZATION SIMPLE
ALTER DATABASE [sql101.Nombuso.Sibiya] SET PARAMETERIZATION SIMPLE
GO

ALTER DATABASE [sql101.firstname.lastname] SET READ_COMMITTED_SNAPSHOT OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET READ_COMMITTED_SNAPSHOT OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET HONOR_BROKER_PRIORITY OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET HONOR_BROKER_PRIORITY OFF
GO

ALTER DATABASE [sql101.firstname.lastname] SET RECOVERY FULL
ALTER DATABASE [sql101.Nombuso.Sibiya] SET RECOVERY FULL
GO

ALTER DATABASE [sql101.firstname.lastname] SET MULTI_USER
ALTER DATABASE [sql101.Nombuso.Sibiya] SET MULTI_USER
GO

ALTER DATABASE [sql101.firstname.lastname] SET PAGE_VERIFY CHECKSUM
ALTER DATABASE [sql101.Nombuso.Sibiya] SET PAGE_VERIFY CHECKSUM
GO

ALTER DATABASE [sql101.firstname.lastname] SET DB_CHAINING OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET DB_CHAINING OFF
GO

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

ALTER DATABASE [sql101.firstname.lastname] SET TARGET_RECOVERY_TIME = 60 SECONDS
ALTER DATABASE [sql101.Nombuso.Sibiya] SET TARGET_RECOVERY_TIME = 60 SECONDS
GO

ALTER DATABASE [sql101.firstname.lastname] SET DELAYED_DURABILITY = DISABLED
ALTER DATABASE [sql101.Nombuso.Sibiya] SET DELAYED_DURABILITY = DISABLED
GO

ALTER DATABASE [sql101.firstname.lastname] SET QUERY_STORE = OFF
ALTER DATABASE [sql101.Nombuso.Sibiya] SET QUERY_STORE = OFF
GO

USE [sql101.firstname.lastname]
USE [sql101.Nombuso.Sibiya]
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.Nombuso.Sibiya] 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 [NombusoSibiya] WITH PASSWORD=N'rabbit123!@#' MUST_CHANGE, DEFAULT_DATABASE=[sql101.Nombuso.Sibiya], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
use [sql101.firstname.lastname]
use [sql101.Nombuso.Sibiya]

GO
use [master]

GO
USE [sql101.firstname.lastname]
USE [sql101.Nombuso.Sibiya]
GO
CREATE USER [firstnamelastname] FOR LOGIN [firstnamelastname]
CREATE USER [NombusoSibiya] FOR LOGIN [NombusoSibiya]
GO
USE [sql101.firstname.lastname]
USE [sql101.Nombuso.Sibiya]
GO
ALTER ROLE [db_owner] ADD MEMBER [firstnamelastname]
ALTER ROLE [db_owner] ADD MEMBER [NombusoSibiya]
GO
4 changes: 4 additions & 0 deletions src/MyTimesheet/MyTimesheet/CacheSecrets.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<appSettings>
<add key="CacheConnection" value="101.redis.cache.windows.net,abortConnect=false,ssl=true,password=85BYRVqUHV6aW7Jz8zIIxRnaYMgbBd2kwo4bpDiz4vw="/>
</appSettings>
55 changes: 51 additions & 4 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,31 +16,75 @@ 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
[HttpGet]
public async Task<ActionResult<IEnumerable<TimesheetEntry>>> Get()
{

return await _db.Entries.ToListAsync();
}

// GET api/values/5
[HttpGet("{id}")]
public async Task<ActionResult<TimesheetEntry>> Get(int id)
public async Task<string> Get(int id)
{
return await _db.Entries.FindAsync(id);
var cacheConnection = _config.GetValue<string>("CacheConnection").ToString();

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

return ConnectionMultiplexer.Connect(cacheConnection);
});

IDatabase cache = lazyConnection.Value.GetDatabase();
var cacheItem = await cache.StringGetAsync(id.ToString());


return cacheItem;
}

// 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>(() =>
//{
// string cacheConnection = ConfigurationManager.AppSettings["CacheConnection"].ToString();
// return ConnectionMultiplexer.Connect(cacheConnection);
//});

//// Connection refers to a property that returns a ConnectionMultiplexer
//// as shown in the previous example.
//IDatabase cache = lazyConnection.Value.GetDatabase();

var data = await _db.Entries.Include(v => v.Employee).Include(c => c.Project).Include(c => c.Project.Client).FirstOrDefaultAsync(x => x.Employee.Id == value.Employee.Id);
var lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{

return ConnectionMultiplexer.Connect(cacheConnection);
});

IDatabase cache = lazyConnection.Value.GetDatabase();

await cache.StringSetAsync(data.Id.ToString(), JsonConvert.SerializeObject(data));

var cacheItem = await cache.StringGetAsync(data.Id.ToString());

lazyConnection.Value.Dispose();
return cacheItem.ToString(); ;
}

// PUT api/values/5
Expand Down
Loading