Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Brayan Sarmiento
API-Gateway-CHEC
Commits
17d006dc
Commit
17d006dc
authored
Jul 21, 2023
by
Jose Hugo Torres
Browse files
gateway sco gk
Modificaciones para gateway con sco y gk
parent
2e963f0b
Changes
73
Hide whitespace changes
Inline
Side-by-side
gatewayGK/Infraestructura/DirectorioCmds.cs
0 → 100644
View file @
17d006dc
/// <summary>
/// Directorio de comandos.
/// Almacena instancia de comandos indexadas por su Referencia.
/// Usado para identificar el comando que procesa un mensaje particular
/// asociado por la propiedad Referencia del comando.
/// </summary>
public
class
CreaDirectorioCmds
{
private
Dictionary
<
string
,
IComando
>
dir
=
new
Dictionary
<
string
,
IComando
>();
/// <summary>
/// Agrega un comando al directorio.
/// </summary>
public
void
AgregaComando
(
IComando
cmd
)
{
dir
.
Add
(
cmd
.
Referencia
,
cmd
);
}
/// <summary>
/// Recupera una "shallow copy" del comando asociado al parámmetro.
/// </summary>
public
IComando
ObtieneComando
(
string
referencia
)
{
IComando
cmd
;
try
{
cmd
=
dir
[
referencia
];
}
catch
(
KeyNotFoundException
)
{
throw
new
Exception
(
$"No se encuentra comando con referencia '
{
referencia
}
'."
);
}
return
cmd
.
CreaCopia
();
}
}
\ No newline at end of file
gatewayGK/Infraestructura/DirectorioCmdsFactory.cs
0 → 100644
View file @
17d006dc
using
GatewaySCO
;
/// <summary>
/// Factory que retorna un directorio de comandos instanciado
/// con los comandos apropiados según tipo de POS.
/// </summary>
public
class
DirectorioCmdsFactory
{
public
static
CreaDirectorioCmds
CreaDirectorio
(
Config
config
)
{
switch
(
config
.
POS
)
{
case
"pruebas"
:
return
DispensaDirectorioCmdsPruebas
.
Dispensa
(
config
);
case
"evapos"
:
return
DispensaDirectorioCmdsEvaPOS
.
Dispensa
(
config
);
case
"gk"
:
return
DispensaDirectorioCmdsGK
.
Dispensa
(
config
);
case
"gk_test"
:
return
DispensaDirectorioCmdsGKPruebas
.
Dispensa
(
config
);
default
:
throw
new
ArgumentException
(
"TipoPOS no válido"
,
"tipoPOS"
);
}
}
}
gatewayGK/Infraestructura/DispensaDirectorioCmdsEvaPOS.cs
0 → 100644
View file @
17d006dc
using
Serilog
;
/// <summary>
/// Instancia directorio de comandos de EvaPOS con cada
/// uno de los comandos.
/// </summary>
public
class
DispensaDirectorioCmdsEvaPOS
:
IDispensaDirectorioCmds
{
/// <summary>
/// Retorna directorio de comandos instanciado y poblado de
/// comandos.
/// </summary>
public
static
CreaDirectorioCmds
Dispensa
(
Config
config
)
{
Log
.
Information
(
"Instancia comandos EvaPOS."
);
throw
new
NotImplementedException
();
}
}
\ No newline at end of file
gatewayGK/Infraestructura/DispensaDirectorioCmdsGK.cs
0 → 100644
View file @
17d006dc
using
Serilog
;
/// <summary>
/// Instancia directorio de comandos de GK Smart POS con cada
/// uno de los comandos.
/// </summary>
public
class
DispensaDirectorioCmdsGK
:
IDispensaDirectorioCmds
{
/// <summary>
/// Retorna directorio de comandos instanciado y poblado de
/// comandos.
/// </summary>
public
static
CreaDirectorioCmds
Dispensa
(
Config
config
)
{
Log
.
Information
(
"Instancia comandos de GK Smart POS."
);
return
new
IniciaDirectorioCmds
()
//.AgregaCmd(new Gk.InitializeRequestCmd())
.
DirectorioCmds
;
}
}
\ No newline at end of file
gatewayGK/Infraestructura/DispensaDirectorioCmdsGKPruebas.cs
0 → 100644
View file @
17d006dc
using
GatewaySCO
;
using
Serilog
;
using
Gk
=
SCOGateway
.
POSGkPruebas
;
/// <summary>
/// Instancia directorio de comandos de prueba de GK con cada
/// uno de los comandos.
/// </summary>
public
class
DispensaDirectorioCmdsGKPruebas
:
IDispensaDirectorioCmds
{
/// <summary>
/// Retorna directorio de comandos instanciado y poblado de
/// comandos.
/// </summary>
public
static
CreaDirectorioCmds
Dispensa
(
Config
config
)
{
Log
.
Information
(
"Instancia comandos de GK de prueba."
);
// Inicializa el entorno para los comandos.
EntornoGK
e
=
new
EntornoGK
();
e
.
Language
=
config
.
Language
;
Entorno
<
EntornoGK
>.
Instancia
.
setDatos
(
e
);
return
new
IniciaDirectorioCmds
()
.
AgregaCmd
(
new
Gk
.
InitializeRequestCmd
())
.
DirectorioCmds
;
}
}
\ No newline at end of file
gatewayGK/Infraestructura/DispensaDirectorioCmdsPrueba.cs
0 → 100644
View file @
17d006dc
using
EvaPOS_API_FRAME.Comandos
;
using
Serilog
;
/// <summary>
/// Instancia directorio de comandos de prueba con cada
/// uno de los comandos.
/// </summary>
public
class
DispensaDirectorioCmdsPruebas
:
IDispensaDirectorioCmds
{
/// <summary>
/// Retorna directorio de comandos instanciado y poblado de
/// comandos.
/// </summary>
public
static
CreaDirectorioCmds
Dispensa
(
Config
config
)
{
Log
.
Information
(
"Instancia comandos de prueba."
);
return
new
IniciaDirectorioCmds
()
.
AgregaCmd
(
new
ErrorCmd
())
.
AgregaCmd
(
new
AddItemRequestCmd
())
.
AgregaCmd
(
new
InitializeRequestCmd
())
.
AgregaCmd
(
new
QueryStatusRequestCmd
())
.
AgregaCmd
(
new
ReportStatusEventsRequestCmd
())
.
AgregaCmd
(
new
SignOffResponseCmd
())
.
AgregaCmd
(
new
AddReceiptLinesRequestCmd
())
.
AgregaCmd
(
new
GetTotalsRequestCmd
())
.
AgregaCmd
(
new
AddTenderDebitCmd
())
.
AgregaCmd
(
new
PrintCurrentReceiptsRequestCmd
())
.
AgregaCmd
(
new
ReprintReceiptsCmd
())
.
AgregaCmd
(
new
TerminateRequestCmd
())
.
AgregaCmd
(
new
VoidTransactionCmd
())
.
AgregaCmd
(
new
RemoveReceiptLinesCmd
())
.
AgregaCmd
(
new
CancelActionCmd
())
.
AgregaCmd
(
new
AddCustomerBirthdateCmd
())
.
AgregaCmd
(
new
AddCustomerCmd
())
.
AgregaCmd
(
new
SuspendTransactionRequestCmd
())
.
DirectorioCmds
;
}
}
\ No newline at end of file
gatewayGK/Infraestructura/Entorno.cs
0 → 100644
View file @
17d006dc
using
Serilog
;
namespace
GatewaySCO
{
/// <summary>
/// Clase singleton que mantiene valores y objetos de interes global.
/// </summary>
public
sealed
class
Entorno
<
T
>
{
/// <summary>
/// Instanciador singleton.
/// </summary>
private
static
readonly
Lazy
<
Entorno
<
T
>>
lazy
=
new
Lazy
<
Entorno
<
T
>>(()
=>
new
Entorno
<
T
>());
/// <summary>
/// Acceso a instancia del singleton.
/// </summary>
public
static
Entorno
<
T
>
Instancia
{
get
{
return
lazy
.
Value
;
}
}
/// <summary>
/// Datos particulares de cada implementación de POS.
/// </summary>
private
static
T
?
_datos
;
/// <summary>
/// Constructor privado.
/// </summary>
private
Entorno
()
{
Log
.
Debug
(
"Entorno inicializado."
);
}
/// <summary>
/// Obtener datos de entorno.
/// </summary>
public
T
getDatos
()
{
if
(
_datos
==
null
)
{
throw
new
ApplicationException
(
"Datos de entorno no inicializados."
);
}
return
_datos
;
}
/// <summary>
/// Fijar datos de entorno.
/// </summary>
public
void
setDatos
(
T
datos
)
{
_datos
=
datos
;
}
}
}
gatewayGK/EvaPosUtil.cs
→
gatewayGK/
Infraestructura/
EvaPosUtil.cs
View file @
17d006dc
using
System
;
using
System.IO
;
using
System.Xml
;
using
System.Xml
;
namespace
EvaPosUtil
namespace
GatewaySCO
{
{
/// <summary>
/// <summary>
/// Clase Utilistarios para operaciones sobre mensajes.
/// Clase Utilistarios para operaciones sobre mensajes.
...
...
gatewayGK/
EvaPosSrvCmd
.cs
→
gatewayGK/
Infraestructura/IComando
.cs
View file @
17d006dc
using
Serilog
;
using
EvaPosSrvDTO
;
using
EvaPosSrvDTO
;
using
EvaPosSrvResp
;
using
EvaPosSrvResp
;
using
System.Collections.Generic
;
/// <summary>
using
System
;
/// Interface de definición de comandos.
using
System.Threading.Tasks
;
/// </summary>
public
interface
IComando
// Comandos que procesan las DTOs.
namespace
EvaPosSrvCmd
{
/// <summary>
/// Interface de definición de comandos.
/// </summary>
public
interface
IComando
{
{
/// <summary>
/// <summary>
/// Identifica el mensaje al cual el comando responde.
/// Identifica el mensaje al cual el comando responde.
...
@@ -38,39 +30,4 @@ namespace EvaPosSrvCmd
...
@@ -38,39 +30,4 @@ namespace EvaPosSrvCmd
/// Retorna una "shallow copy" del objeto.
/// Retorna una "shallow copy" del objeto.
/// </summary>
/// </summary>
public
IComando
CreaCopia
();
public
IComando
CreaCopia
();
}
}
\ No newline at end of file
/// <summary>
/// Directorio de comandos.
/// Almacena instancia de comandos indexadas por su Referencia.
/// Usado para identificar el comando que procesa un mensaje particular
/// asociado por la propiedad Referencia del comando.
/// </summary>
public
class
DirectorioCmds
{
private
Dictionary
<
string
,
IComando
>
dir
=
new
Dictionary
<
string
,
IComando
>();
/// <summary>
/// Agrega un comando al directorio.
/// </summary>
public
void
AgregaComando
(
IComando
cmd
)
{
dir
.
Add
(
cmd
.
Referencia
,
cmd
);
}
/// <summary>
/// Recupera una "shallow copy" del comando asociado al parámmetro.
/// </summary>
public
IComando
ObtieneComando
(
string
referencia
)
{
IComando
cmd
;
try
{
cmd
=
dir
[
referencia
];
}
catch
(
KeyNotFoundException
)
{
throw
new
Exception
(
$"No se encuentra comando con referencia '
{
referencia
}
'."
);
}
return
cmd
.
CreaCopia
();
}
}
}
\ No newline at end of file
gatewayGK/Infraestructura/IDispensaDirectorioCmds.cs
0 → 100644
View file @
17d006dc
/// <summary>
/// Interface para definir las clases que instancian
/// directorios de comandos según el tipo de POS.
/// </summary>
public
interface
IDispensaDirectorioCmds
{
/// <summary>
/// Dispensa un directorio de comandos inicializados.
/// </summary>
static
abstract
CreaDirectorioCmds
Dispensa
(
Config
config
);
}
\ No newline at end of file
gatewayGK/Infraestructura/IniciaDirectorioCmds.cs
0 → 100644
View file @
17d006dc
/// <summary>
/// Clase para inicializar el directorio de comandos.
/// Se crear una instancia de cada comando según el tipo de POS.
/// </summary>
/// <remarks>
/// Evaluar modificar la definición de comandos para que el mismo
/// comando se instancie.
/// </remarks
public
class
IniciaDirectorioCmds
{
public
CreaDirectorioCmds
DirectorioCmds
{
get
;
private
set
;
}
=
new
CreaDirectorioCmds
();
public
IniciaDirectorioCmds
AgregaCmd
(
IComando
cmd
)
{
DirectorioCmds
.
AgregaComando
(
cmd
);
return
this
;
}
}
\ No newline at end of file
gatewayGK/POSGk/AuthenticateReq.cs
0 → 100644
View file @
17d006dc
using
System.Text.Json.Serialization
;
namespace
SCOGateway.POSGk
{
/// <summary>
/// Registro para solicitar autenticación a cliente Smart POS GK.
/// </summary>
record
AutenticationReq
{
[
JsonPropertyName
(
"loginName"
)]
public
string
LoginName
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"password"
)]
public
string
Password
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"businessUnitId"
)]
public
string
BusinessUnitId
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"passwordRequired"
)]
public
bool
PasswordRequired
{
get
;
set
;
}
=
true
;
}
}
\ No newline at end of file
gatewayGK/POSGk/AuthenticateResp.cs
0 → 100644
View file @
17d006dc
using
System.Text.Json.Serialization
;
namespace
SCOGateway.POSGk
{
record
AuthenticateResp
{
[
JsonPropertyName
(
"operatorID"
)]
public
string
OperatorID
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"workerID"
)]
public
string
WorkerID
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"firstName"
)]
public
string
FirstName
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"lastName"
)]
public
string
LastName
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"languageID"
)]
public
string
LanguageID
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"realmId"
)]
public
string
RealmId
{
get
;
set
;
}
=
""
;
[
JsonPropertyName
(
"expirationCountDays"
)]
public
int
ExpirationCountDays
{
get
;
set
;
}
=
0
;
[
JsonPropertyName
(
"passwordBeforeExpiration"
)]
public
bool
PasswordBeforeExpiration
{
get
;
set
;
}
=
true
;
}
}
\ No newline at end of file
gatewayGK/POSGk/ConstantesGK.cs
0 → 100644
View file @
17d006dc
namespace
SCOGateway.POSGk
{
/// <summary>
/// Constantes del ambiente Gk Smart POS.
/// </summary>
public
static
class
ConstantesGK
{
/// <summary>
/// Url base ambiente de pruebas Gk maqueta.
/// </summary>
public
const
string
UrlBaseMaqueta
=
"https://julia.redsis.com/castlemock/mock/rest/project/KdLiqe/application/l4KAuU"
;
}
}
\ No newline at end of file
gatewayGK/POSGk/EntornoGK.cs
0 → 100644
View file @
17d006dc
/// <summary>
/// Esta clase almacena valores requeridos
/// para la operación del SCO con la operación de la POS GK,
/// valores que deben ser compartidos entre comandos.
/// </summary>
public
class
EntornoGK
{
/// <summary>
/// Gk - seguridad usuario.
/// </summary>
public
string
RealmId
{
get
;
set
;
}
=
""
;
/// <summary>
/// Gk - días expiración realmId.
/// </summary>
public
int
ExpirationCountDays
{
get
;
set
;
}
=
0
;
/// <summary>
/// GK Language.
/// </summary>
public
string
Language
{
get
;
set
;
}
=
"en"
;
}
\ No newline at end of file
gatewayGK/Program.cs
View file @
17d006dc
using
Serilog
;
using
Serilog
;
using
static
System
.
Net
.
Mime
.
MediaTypeNames
;
using
Microsoft.Extensions.Configuration
;
using
EvaPosSCOSrv
;
using
EvaPosSCOSrv
;
using
EvaPosSrvAplicacionImp
;
using
EvaPosSrvAplicacionImp
;
using
EvaPosCmdImp
;
using
EvaPosSrvRespImp
;
using
EvaPosSrvRespImp
;
using
System
;
/// <summary>
/// <summary>
/// EvaPos-API : servidor api, sockets y rest.
/// EvaPos-API : servidor api, sockets y rest.
...
@@ -14,24 +12,46 @@ class Program
...
@@ -14,24 +12,46 @@ class Program
{
{
static
void
Main
(
string
[]
args
)
static
void
Main
(
string
[]
args
)
{
{
Console
.
WriteLine
();
try
Console
.
WriteLine
(
"Version: {0}"
,
Environment
.
Version
.
ToString
());
{
Log
.
Logger
=
new
LoggerConfiguration
()
Console
.
WriteLine
(
"*** Gateway SCO ***"
);
.
MinimumLevel
.
Debug
()
// Instancia objeto de configuración, usa proveedor json y variables ambiente.
.
WriteTo
.
Console
()
IConfigurationRoot
config
=
new
ConfigurationBuilder
()
.
WriteTo
.
File
(
"C:\\GK-Gateway\\log\\evapos-api.log"
,
rollingInterval
:
RollingInterval
.
Day
)
.
AddJsonFile
(
"appsettings.json"
)
.
CreateLogger
();
.
AddEnvironmentVariables
()
.
Build
();
// Lee archivo de configuración.
Config
?
configuracion
=
config
.
GetRequiredSection
(
"GatewayConfig"
).
Get
<
Config
>();
if
(
configuracion
is
null
)
{
throw
new
ApplicationException
(
"Error en archivo de configuración, sección 'GatewayConfig' no encontrada."
);
}
// TODO - opción de incluir la activación en la cadena de configuración.
// TODO Sacar la ruta de logs del objeto de configuración adecuadamente.
// TODO - aunque hace uso de una "invocación fluida" no parece ser el tipo de api que se beneficia de ese esquema.
string
?
rutaLogs
=
config
[
"Serilog:WriteTo:1:Args:path"
];
ServidorSocket
servidor
=
new
ServidorSocket
()
Console
.
WriteLine
(
$"Archivo de logs en
{
rutaLogs
}
"
);
//.ConIp("127.0.0.1")
.
ConIp
(
"192.168.101.70"
)
// Instancia Serilog según parámetros en archivo de configuración.
.
EnPuerto
(
6697
)
Log
.
Logger
=
new
LoggerConfiguration
()
.
AgregaDispensadorAdaptadores
(
IniciaDirectorioAdaptadores
.
Cargar
().
DirectorioAdaptadores
)
.
ReadFrom
.
Configuration
(
config
)
.
AgregaDispensadorComandos
(
IniciaDirectorioCmds
.
Cargar
().
DirectorioCmds
)
.
CreateLogger
();
.
AgregaProcesadorAplicacion
(
new
Aplicacion
())
Log
.
Information
(
configuracion
.
ToString
());
.
Activa
();
// TODO - opción de incluir la activación en la cadena de configuración.
// TODO - aunque hace uso de una "invocación fluida" no parece ser el tipo de api que se beneficia de ese esquema.
ServidorSocket
servidor
=
new
ServidorSocket
()
.
ConIp
(
configuracion
.
IpSCO
)
.
EnPuerto
(
configuracion
.
PortSCO
)
.
AgregaDispensadorAdaptadores
(
IniciaDirectorioAdaptadores
.
Cargar
().
DirectorioAdaptadores
)
.
AgregaDirectorioCmds
(
DirectorioCmdsFactory
.
CreaDirectorio
(
configuracion
))
.
AgregaProcesadorAplicacion
(
new
Aplicacion
())
.
Activa
();
}
catch
(
Exception
e
)
{
Log
.
Error
(
$"Excepción:
{
e
}
"
);
Environment
.
Exit
(
1
);
}
}
}
}
}
\ No newline at end of file
gatewayGK/EvaPosSrvAplicacion.cs
→
gatewayGK/
Servidor/
EvaPosSrvAplicacion.cs
View file @
17d006dc
using
EvaPosSrvCmd
;
using
EvaPosSrvResp
;
using
EvaPosSrvResp
;
using
System.Threading.Tasks
;
namespace
EvaPosSrvAplicacion
namespace
EvaPosSrvAplicacion
{
{
...
...
gatewayGK/EvaPosSrvAplicacionImp.cs
→
gatewayGK/
Servidor/
EvaPosSrvAplicacionImp.cs
View file @
17d006dc
using
EvaPosSrvCmd
;
using
EvaPosSrvResp
;
using
EvaPosSrvResp
;
using
EvaPosSrvAplicacion
;
using
EvaPosSrvAplicacion
;
using
System.Threading.Tasks
;
namespace
EvaPosSrvAplicacionImp
namespace
EvaPosSrvAplicacionImp
{
{
...
...
gatewayGK/EvaPosSrvDTO.cs
→
gatewayGK/
Servidor/
EvaPosSrvDTO.cs
View file @
17d006dc
File moved
gatewayGK/EvaPosSrvResp.cs
→
gatewayGK/
Servidor/
EvaPosSrvResp.cs
View file @
17d006dc
File moved
Prev
1
2
3
4
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment