Commit 01585b9a authored by Ali's avatar Ali

Initial commit

parents
<?xml version="1.0" encoding="UTF-8"?>
<!--
IIS configuration sections.
For schema documentation, see
%IIS_BIN%\config\schema\IIS_schema.xml.
Please make a backup of this file before making any changes to it.
NOTE: The following environment variables are available to be used
within this file and are understood by the IIS Express.
%IIS_USER_HOME% - The IIS Express home directory for the user
%IIS_SITES_HOME% - The default home directory for sites
%IIS_BIN% - The location of the IIS Express binaries
%SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-->
<configuration>
<!--
The <configSections> section controls the registration of sections.
Section is the basic unit of deployment, locking, searching and
containment for configuration settings.
Every section belongs to one section group.
A section group is a container of logically-related sections.
Sections cannot be nested.
Section groups may be nested.
<section
name="" [Required, Collection Key] [XML name of the section]
allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
overrideModeDefault="Allow" [Allow|Deny] [Default delegation mode]
allowLocation="true" [true|false] [Allowed in location tags]
/>
The recommended way to unlock sections is by using a location tag:
<location path="Default Web Site" overrideMode="Allow">
<system.webServer>
<asp />
</system.webServer>
</location>
-->
<configSections>
<sectionGroup name="system.applicationHost">
<section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="system.webServer">
<section name="asp" overrideModeDefault="Deny" />
<section name="caching" overrideModeDefault="Allow" />
<section name="cgi" overrideModeDefault="Deny" />
<section name="defaultDocument" overrideModeDefault="Allow" />
<section name="directoryBrowse" overrideModeDefault="Allow" />
<section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="handlers" overrideModeDefault="Deny" />
<section name="httpCompression" overrideModeDefault="Allow" allowDefinition="Everywhere" />
<section name="httpErrors" overrideModeDefault="Allow" />
<section name="httpLogging" overrideModeDefault="Deny" />
<section name="httpProtocol" overrideModeDefault="Allow" />
<section name="httpRedirect" overrideModeDefault="Allow" />
<section name="httpTracing" overrideModeDefault="Deny" />
<section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
<section name="odbcLogging" overrideModeDefault="Deny" />
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Deny" />
<section name="basicAuthentication" overrideModeDefault="Deny" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="digestAuthentication" overrideModeDefault="Deny" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="windowsAuthentication" overrideModeDefault="Deny" />
</sectionGroup>
<section name="authorization" overrideModeDefault="Allow" />
<section name="ipSecurity" overrideModeDefault="Deny" />
<section name="dynamicIpSecurity" overrideModeDefault="Deny" />
<section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="requestFiltering" overrideModeDefault="Allow" />
</sectionGroup>
<section name="serverRuntime" overrideModeDefault="Deny" />
<section name="serverSideInclude" overrideModeDefault="Deny" />
<section name="staticContent" overrideModeDefault="Allow" />
<sectionGroup name="tracing">
<section name="traceFailedRequests" overrideModeDefault="Allow" />
<section name="traceProviderDefinitions" overrideModeDefault="Deny" />
</sectionGroup>
<section name="urlCompression" overrideModeDefault="Allow" />
<section name="validation" overrideModeDefault="Allow" />
<sectionGroup name="webdav">
<section name="globalSettings" overrideModeDefault="Deny" />
<section name="authoring" overrideModeDefault="Deny" />
<section name="authoringRules" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="rewrite">
<section name="allowedServerVariables" overrideModeDefault="Deny" />
<section name="rules" overrideModeDefault="Allow" />
<section name="outboundRules" overrideModeDefault="Allow" />
<section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
<section name="providers" overrideModeDefault="Allow" />
<section name="rewriteMaps" overrideModeDefault="Allow" />
</sectionGroup>
<section name="webSocket" overrideModeDefault="Deny" />
<section name="aspNetCore" overrideModeDefault="Allow" /></sectionGroup>
</configSections>
<configProtectedData>
<providers>
<add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
<add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA/HKxkz6alrlAPez0IUgujj/6k3WxCDriHp6jvpv3yEZmo7h6SMzGLxo4mTrIQVHSkB7tmElHKfUFTzE2BWF7nFWHY6Z6qmGBauFzwJMwESjril7Gjz69RBFH259HQ6aRDq9Xfx7U7H4HtdmnKNqGjgl/hwPQBGeIlWiDh+sYv3vKB0QU971tjX6H2B+9armlnC8UOuA6JYMDMI/VLLL16sng0fWAy5JYe0YVABVjiAWDW264RZW9Tr1Oax4qHZKg+SdjULxeOc2YmpX+d0yeITo1HkPF1hN1gHpIPIUDo05ilHUNfR3OkjVCIQK4cFKCq1s8NH+y+13MxUC4Fn1AlQ==" />
<add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAALmU8lTC+v2qtfQiiiquvvLpUQqKLEXs+jSKoWCM/uPhyB++k4dwug19mGidNK5FYiWK2KYE1yhjVJcbp12E98Q0R2nT7eBiCMY2JairxQ591rqABK7keGaIjwH7PwGzSpILl3RJ4YFvJ/7ZXEJxeDZIjW8ZxWVXx+/VyHs9U3WguLEkgMUX3jrxJi8LouxaIVPJAv/YQ1ZCWs8zImitxX/C/7o7yaIxznfsN5nGQzQfpUDPeby99aw2zPVTtZI2LaWIBON8guABvZ6JtJVDWmfdK6sodbnwdZkr6/Z2rfvamT1dC1SpQrGG7ulR/f9/GXvCaW10ZVKxekBF/CYlNMg==" />
</providers>
</configProtectedData>
<system.applicationHost>
<applicationPools>
<add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel loadUserProfile="true" setProfileEnvironment="false" />
</applicationPoolDefaults>
</applicationPools>
<!--
The <listenerAdapters> section defines the protocols with which the
Windows Process Activation Service (WAS) binds.
-->
<listenerAdapters>
<add name="http" />
</listenerAdapters>
<sites>
<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
<siteDefaults>
<!-- To enable logging, please change the below attribute "enabled" to "true" -->
<logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />
<traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
<webLimits />
</system.applicationHost>
<system.webServer>
<serverRuntime />
<asp scriptErrorSentToBrowser="true">
<cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
<limits />
</asp>
<caching enabled="true" enableKernelCache="true">
</caching>
<cgi />
<defaultDocument enabled="true">
<files>
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
<add value="default.aspx" />
</files>
</defaultDocument>
<directoryBrowse enabled="false" />
<fastCgi />
<!--
The <globalModules> section defines all native-code modules.
To enable a module, specify it in the <modules> section.
-->
<globalModules>
<add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
<add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
<add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
<add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
<add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
<add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
<add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
<add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
<add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
<add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
<add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
<add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
<add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
<add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
<add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
<add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
<add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
<add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
<add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
<add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
<add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
<add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
<add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
<add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
<add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
<add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
<add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
<add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
<!-- <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
<add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
<add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
<add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
<add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
<add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
<add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
<add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
<add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
<add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
<add name="AspNetCoreModuleV2" image="%IIS_BIN%\Asp.Net Core Module\V2\aspnetcorev2.dll" />
</globalModules>
<httpCompression directory="%TEMP%">
<scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
<add mimeType="text/event-stream" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
<error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
<error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
<error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
<error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
<error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
<error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
<error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
<error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
<error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
</httpErrors>
<httpLogging dontLog="false" />
<httpProtocol>
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
<httpRedirect enabled="false" />
<httpTracing />
<isapiFilters>
<filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
<filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
<filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
</isapiFilters>
<odbcLogging />
<security>
<access sslFlags="None" />
<applicationDependencies>
<application name="Active Server Pages" groupId="ASP" />
</applicationDependencies>
<authentication>
<anonymousAuthentication enabled="true" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
<ipSecurity allowUnlisted="true" />
<isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
<add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
</isapiCgiRestriction>
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<add fileExtension=".asa" allowed="false" />
<add fileExtension=".asax" allowed="false" />
<add fileExtension=".ascx" allowed="false" />
<add fileExtension=".master" allowed="false" />
<add fileExtension=".skin" allowed="false" />
<add fileExtension=".browser" allowed="false" />
<add fileExtension=".sitemap" allowed="false" />
<add fileExtension=".config" allowed="false" />
<add fileExtension=".cs" allowed="false" />
<add fileExtension=".csproj" allowed="false" />
<add fileExtension=".vb" allowed="false" />
<add fileExtension=".vbproj" allowed="false" />
<add fileExtension=".webinfo" allowed="false" />
<add fileExtension=".licx" allowed="false" />
<add fileExtension=".resx" allowed="false" />
<add fileExtension=".resources" allowed="false" />
<add fileExtension=".mdb" allowed="false" />
<add fileExtension=".vjsproj" allowed="false" />
<add fileExtension=".java" allowed="false" />
<add fileExtension=".jsl" allowed="false" />
<add fileExtension=".ldb" allowed="false" />
<add fileExtension=".dsdgm" allowed="false" />
<add fileExtension=".ssdgm" allowed="false" />
<add fileExtension=".lsad" allowed="false" />
<add fileExtension=".ssmap" allowed="false" />
<add fileExtension=".cd" allowed="false" />
<add fileExtension=".dsprototype" allowed="false" />
<add fileExtension=".lsaprototype" allowed="false" />
<add fileExtension=".sdm" allowed="false" />
<add fileExtension=".sdmDocument" allowed="false" />
<add fileExtension=".mdf" allowed="false" />
<add fileExtension=".ldf" allowed="false" />
<add fileExtension=".ad" allowed="false" />
<add fileExtension=".dd" allowed="false" />
<add fileExtension=".ldd" allowed="false" />
<add fileExtension=".sd" allowed="false" />
<add fileExtension=".adprototype" allowed="false" />
<add fileExtension=".lddprototype" allowed="false" />
<add fileExtension=".exclude" allowed="false" />
<add fileExtension=".refresh" allowed="false" />
<add fileExtension=".compiled" allowed="false" />
<add fileExtension=".msgx" allowed="false" />
<add fileExtension=".vsdisco" allowed="false" />
<add fileExtension=".rules" allowed="false" />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />
<add segment="App_code" />
<add segment="App_GlobalResources" />
<add segment="App_LocalResources" />
<add segment="App_WebReferences" />
<add segment="App_Data" />
<add segment="App_Browsers" />
</hiddenSegments>
</requestFiltering>
</security>
<serverSideInclude ssiExecDisable="false" />
<staticContent lockAttributes="isDocFooterFileName">
<mimeMap fileExtension=".323" mimeType="text/h323" />
<mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
<mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
<mimeMap fileExtension=".aac" mimeType="audio/aac" />
<mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
<mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
<mimeMap fileExtension=".accde" mimeType="application/msaccess" />
<mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
<mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
<mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ai" mimeType="application/postscript" />
<mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
<mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
<mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
<mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
<mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
<mimeMap fileExtension=".art" mimeType="image/x-jg" />
<mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asm" mimeType="text/plain" />
<mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
<mimeMap fileExtension=".au" mimeType="audio/basic" />
<mimeMap fileExtension=".avi" mimeType="video/avi" />
<mimeMap fileExtension=".axs" mimeType="application/olescript" />
<mimeMap fileExtension=".bas" mimeType="text/plain" />
<mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bmp" mimeType="image/bmp" />
<mimeMap fileExtension=".c" mimeType="text/plain" />
<mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
<mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
<mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
<mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
<mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
<mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
<mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
<mimeMap fileExtension=".cnf" mimeType="text/plain" />
<mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
<mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
<mimeMap fileExtension=".cpp" mimeType="text/plain" />
<mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
<mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
<mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".csh" mimeType="application/x-csh" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
<mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dcr" mimeType="application/x-director" />
<mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
<mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".dib" mimeType="image/bmp" />
<mimeMap fileExtension=".dir" mimeType="application/x-director" />
<mimeMap fileExtension=".disco" mimeType="text/xml" />
<mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
<mimeMap fileExtension=".dll.config" mimeType="text/xml" />
<mimeMap fileExtension=".dlm" mimeType="text/dlm" />
<mimeMap fileExtension=".doc" mimeType="application/msword" />
<mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
<mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<mimeMap fileExtension=".dot" mimeType="application/msword" />
<mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
<mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
<mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dtd" mimeType="text/xml" />
<mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
<mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
<mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
<mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dxr" mimeType="application/x-director" />
<mimeMap fileExtension=".eml" mimeType="message/rfc822" />
<mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
<mimeMap fileExtension=".eps" mimeType="application/postscript" />
<mimeMap fileExtension=".esd" mimeType="application/vnd.ms-cab-compressed" />
<mimeMap fileExtension=".etx" mimeType="text/x-setext" />
<mimeMap fileExtension=".evy" mimeType="application/envoy" />
<mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
<mimeMap fileExtension=".exe.config" mimeType="text/xml" />
<mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
<mimeMap fileExtension=".fif" mimeType="application/fractals" />
<mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
<mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".flv" mimeType="video/x-flv" />
<mimeMap fileExtension=".gif" mimeType="image/gif" />
<mimeMap fileExtension=".glb" mimeType="model/gltf-binary" />
<mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
<mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
<mimeMap fileExtension=".h" mimeType="text/plain" />
<mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
<mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
<mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
<mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
<mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
<mimeMap fileExtension=".hta" mimeType="application/hta" />
<mimeMap fileExtension=".htc" mimeType="text/x-component" />
<mimeMap fileExtension=".htm" mimeType="text/html" />
<mimeMap fileExtension=".html" mimeType="text/html" />
<mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
<mimeMap fileExtension=".hxt" mimeType="text/html" />
<mimeMap fileExtension=".ico" mimeType="image/x-icon" />
<mimeMap fileExtension=".ics" mimeType="text/calendar" />
<mimeMap fileExtension=".ief" mimeType="image/ief" />
<mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
<mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
<mimeMap fileExtension=".jar" mimeType="application/java-archive" />
<mimeMap fileExtension=".java" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
<mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
<mimeMap fileExtension=".js" mimeType="application/javascript" />
<mimeMap fileExtension=".json" mimeType="application/json" />
<mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
<mimeMap fileExtension=".jsx" mimeType="text/jscript" />
<mimeMap fileExtension=".latex" mimeType="application/x-latex" />
<mimeMap fileExtension=".less" mimeType="text/css" />
<mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
<mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
<mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
<mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
<mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
<mimeMap fileExtension=".m4v" mimeType="video/mp4" />
<mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
<mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
<mimeMap fileExtension=".map" mimeType="text/plain" />
<mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
<mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
<mimeMap fileExtension=".mht" mimeType="message/rfc822" />
<mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
<mimeMap fileExtension=".mid" mimeType="audio/mid" />
<mimeMap fileExtension=".midi" mimeType="audio/mid" />
<mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
<mimeMap fileExtension=".mno" mimeType="text/xml" />
<mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
<mimeMap fileExtension=".mov" mimeType="video/quicktime" />
<mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
<mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
<mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
<mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
<mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
<mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
<mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
<mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
<mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
<mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".nws" mimeType="message/rfc822" />
<mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".oda" mimeType="application/oda" />
<mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
<mimeMap fileExtension=".ods" mimeType="application/oleobject" />
<mimeMap fileExtension=".oga" mimeType="audio/ogg" />
<mimeMap fileExtension=".ogg" mimeType="video/ogg" />
<mimeMap fileExtension=".ogv" mimeType="video/ogg" />
<mimeMap fileExtension=".one" mimeType="application/onenote" />
<mimeMap fileExtension=".onea" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
<mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
<mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
<mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
<mimeMap fileExtension=".otf" mimeType="font/otf" />
<mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
<mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
<mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
<mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
<mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pdf" mimeType="application/pdf" />
<mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
<mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
<mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".png" mimeType="image/png" />
<mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
<mimeMap fileExtension=".pnz" mimeType="image/png" />
<mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
<mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
<mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
<mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
<mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
<mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
<mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
<mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
<mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
<mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ps" mimeType="application/postscript" />
<mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
<mimeMap fileExtension=".qt" mimeType="video/quicktime" />
<mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
<mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
<mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
<mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
<mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
<mimeMap fileExtension=".rmi" mimeType="audio/mid" />
<mimeMap fileExtension=".roff" mimeType="application/x-troff" />
<mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
<mimeMap fileExtension=".rtf" mimeType="application/rtf" />
<mimeMap fileExtension=".rtx" mimeType="text/richtext" />
<mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
<mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
<mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
<mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
<mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
<mimeMap fileExtension=".sgml" mimeType="text/sgml" />
<mimeMap fileExtension=".sh" mimeType="application/x-sh" />
<mimeMap fileExtension=".shar" mimeType="application/x-shar" />
<mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
<mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
<mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
<mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
<mimeMap fileExtension=".snd" mimeType="audio/basic" />
<mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
<mimeMap fileExtension=".spx" mimeType="audio/ogg" />
<mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
<mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
<mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
<mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
<mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
<mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
<mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
<mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
<mimeMap fileExtension=".t" mimeType="application/x-troff" />
<mimeMap fileExtension=".tar" mimeType="application/x-tar" />
<mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
<mimeMap fileExtension=".tex" mimeType="application/x-tex" />
<mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
<mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
<mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tif" mimeType="image/tiff" />
<mimeMap fileExtension=".tiff" mimeType="image/tiff" />
<mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tr" mimeType="application/x-troff" />
<mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
<mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
<mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".txt" mimeType="text/plain" />
<mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
<mimeMap fileExtension=".uls" mimeType="text/iuls" />
<mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
<mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
<mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
<mimeMap fileExtension=".vcs" mimeType="text/plain" />
<mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
<mimeMap fileExtension=".vml" mimeType="text/xml" />
<mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
<mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".wasm" mimeType="application/wasm" />
<mimeMap fileExtension=".wav" mimeType="audio/wav" />
<mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
<mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
<mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".webm" mimeType="video/webm" />
<mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
<mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
<mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
<mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
<mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
<mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
<mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
<mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
<mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
<mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
<mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
<mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
<mimeMap fileExtension=".woff" mimeType="font/x-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
<mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
<mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wsdl" mimeType="text/xml" />
<mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
<mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
<mimeMap fileExtension=".x" mimeType="application/directx" />
<mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
<mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
<mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
<mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
<mimeMap fileExtension=".xdr" mimeType="text/plain" />
<mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
<mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
<mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
<mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
<mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
<mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xml" mimeType="text/xml" />
<mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
<mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
<mimeMap fileExtension=".xsd" mimeType="text/xml" />
<mimeMap fileExtension=".xsf" mimeType="text/xml" />
<mimeMap fileExtension=".xsl" mimeType="text/xml" />
<mimeMap fileExtension=".xslt" mimeType="text/xml" />
<mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
<mimeMap fileExtension=".z" mimeType="application/x-compress" />
<mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
</staticContent>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-999" />
</add>
</traceFailedRequests>
<traceProviderDefinitions>
<add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
<areas>
<clear />
<add name="Authentication" value="2" />
<add name="Security" value="4" />
<add name="Filter" value="8" />
<add name="StaticFile" value="16" />
<add name="CGI" value="32" />
<add name="Compression" value="64" />
<add name="Cache" value="128" />
<add name="RequestNotifications" value="256" />
<add name="Module" value="512" />
<add name="Rewrite" value="1024" />
<add name="FastCGI" value="4096" />
<add name="WebSocket" value="16384" />
<add name="ANCM" value="65536" />
</areas>
</add>
<add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
<areas>
<clear />
</areas>
</add>
<add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
<areas>
<clear />
</areas>
</add>
<add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
<areas>
<add name="Infrastructure" value="1" />
<add name="Module" value="2" />
<add name="Page" value="4" />
<add name="AppServices" value="8" />
</areas>
</add>
</traceProviderDefinitions>
</tracing>
<urlCompression />
<validation />
<webdav>
<globalSettings>
<propertyStores>
<add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
</propertyStores>
<lockStores>
<add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
</lockStores>
</globalSettings>
<authoring>
<locks enabled="true" lockStore="webdav_simple_lock" />
</authoring>
<authoringRules />
</webdav>
<webSocket />
<applicationInitialization />
</system.webServer>
<location path="" overrideMode="Allow">
<system.webServer>
<modules>
<add name="IsapiFilterModule" lockItem="true" />
<add name="BasicAuthenticationModule" lockItem="true" />
<add name="IsapiModule" lockItem="true" />
<add name="HttpLoggingModule" lockItem="true" />
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="ServerSideIncludeModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
<add name="AnonymousAuthenticationModule" lockItem="true" />
<add name="CertificateMappingAuthenticationModule" lockItem="true" />
<add name="UrlAuthorizationModule" lockItem="true" />
<add name="WindowsAuthenticationModule" lockItem="true" />
<add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
<add name="WebMatrixSupportModule" lockItem="true" />
<add name="IpRestrictionModule" lockItem="true" />
<add name="DynamicIpRestrictionModule" lockItem="true" />
<add name="RequestFilteringModule" lockItem="true" />
<add name="CustomLoggingModule" lockItem="true" />
<add name="CustomErrorModule" lockItem="true" />
<add name="FailedRequestsTracingModule" lockItem="true" />
<add name="CgiModule" lockItem="true" />
<add name="FastCgiModule" lockItem="true" />
<!-- <add name="WebDAVModule" /> -->
<add name="RewriteModule" />
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
<add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
<add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
<add name="ApplicationInitializationModule" lockItem="true" />
<add name="WebSocketModule" lockItem="true" />
<add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ConfigurationValidationModule" lockItem="true" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
<add name="AspNetCoreModuleV2" lockItem="true" />
</modules>
<handlers accessPolicy="Read, Script">
<!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
<add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
<add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
<add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
<add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</location>
</configuration>

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33530.505
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JobPortalAPI", "JobPortalAPI\JobPortalAPI.csproj", "{59AB2A1F-3E6B-44E1-9267-2B59B23BD412}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{59AB2A1F-3E6B-44E1-9267-2B59B23BD412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{59AB2A1F-3E6B-44E1-9267-2B59B23BD412}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59AB2A1F-3E6B-44E1-9267-2B59B23BD412}.Release|Any CPU.ActiveCfg = Release|Any CPU
{59AB2A1F-3E6B-44E1-9267-2B59B23BD412}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {63FF4631-7611-4D17-B20C-95084CAF3E2E}
EndGlobalSection
EndGlobal
namespace JobPortalAPI.Configurations
{
public class JwtConfig
{
public String Secret { get; set; }
}
}
using JobPortalAPI.Configurations;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.Formats.Asn1;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
namespace JobPortalAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AccountController : BaseController
{
private readonly UserManager<IdentityUser> _userManager;
private readonly IConfiguration _configuration;
public AccountController(UserManager<IdentityUser> userManager, IConfiguration configuration, IUnitOfWork unitOfWork) : base(unitOfWork)
{
_userManager = userManager;
_configuration = configuration;
}
[AllowAnonymous]
[HttpPost("JobseekerLogIn")]
public async Task<IActionResult> JobseekerLogIn([FromBody] LogInDto dto)
{
if (ModelState.IsValid)
{
var user_exist = await _userManager.FindByEmailAsync(dto.email);
if (user_exist == null)
{
return BadRequest
(
new AuthResult()
{
result = false,
Errors = new List<string>()
{
"Email doesn't exist"
}
}
);
}
var is_correct = await _userManager.CheckPasswordAsync( user_exist, dto.password);
if(!is_correct)
{
return BadRequest
(
new AuthResult()
{
result = false,
Errors = new List<string>()
{
"password and email do not match!!"
}
}
);
}
string token = GenerateJwtToken( user_exist);
var person = _unitOfWork.PersonRepo.GetAll().FirstOrDefault(p => p.Email == dto.email);
var jobseeker = _unitOfWork.JobSeekerRepo.GetAll().FirstOrDefault(p => p.Id == person!.Id);
if(jobseeker != null)
{
return Ok(new AuthResult()
{
Id = person!.Id,
result = true,
Token = token,
isCompany = false
}) ;
}
else
{
return BadRequest(new AuthResult()
{
result = false,
Errors = new List<string>()
{
"This email for company and you are try to login as jobseeker!!!"
}
});
}
}
return BadRequest(new AuthResult()
{
result = false,
Errors = new List<string>()
{
"Invalid payload"
}
});
}
[AllowAnonymous]
[HttpPost("CompanyLogIn")]
public async Task<IActionResult> CompanyLogIn([FromBody] LogInDto dto)
{
if (ModelState.IsValid)
{
var user_exist = await _userManager.FindByEmailAsync(dto.email);
if (user_exist == null)
{
return BadRequest
(
new AuthResult()
{
result = false,
Errors = new List<string>()
{
"Email doesn't exist"
}
}
);
}
var is_correct = await _userManager.CheckPasswordAsync(user_exist, dto.password);
if (!is_correct)
{
return BadRequest
(
new AuthResult()
{
result = false,
Errors = new List<string>()
{
"password and email do not match!!"
}
}
);
}
string token = GenerateJwtToken(user_exist);
var person = _unitOfWork.PersonRepo.GetAll().FirstOrDefault(p => p.Email == dto.email);
var company = _unitOfWork.CompanyRepo.GetAll().FirstOrDefault(p => p.Id == person!.Id);
if (company != null)
{
return Ok(new AuthResult()
{
Id = person!.Id,
result = true,
Token = token,
isCompany = true
}); ;
}
else
{
return BadRequest(new AuthResult()
{
result = false,
Errors = new List<string>()
{
"This email for jobseeker and you are try to login as company!!!"
}
});
}
}
return BadRequest(new AuthResult()
{
result = false,
Errors = new List<string>()
{
"Invalid payload"
}
});
}
[HttpPut("ChangePassword/{id}")]
public async Task<IActionResult> ChangePassword(int id ,[FromBody] ChangePasswordDto dto)
{
if (ModelState.IsValid)
{
var person = _unitOfWork.PersonRepo.Get(id);
var user_exist = await _userManager.FindByEmailAsync(dto.email);
if (user_exist != null)
{
if(dto.newPassword == dto.confirmedPassword)
{
if (user_exist.Email == person.Email)
{
var is_correct = await _userManager.CheckPasswordAsync(user_exist, dto.oldPassword);
if (is_correct)
{
await _userManager.ChangePasswordAsync(user_exist, dto.oldPassword, dto.newPassword);
return Ok();
}
else
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"Email and password does not match"
}
}
);
}
}
else
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"this email is not for you"
}
}
);
}
}
else
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"new password and confirmed password do not match!!! "
}
}
);
}
}
else
{
return NotFound(
new AuthResult()
{
Errors = new List<string>()
{
"this email does not found "
}
}
);
}
}
else
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"Enter valid values"
}
}
);
}
}
private String GenerateJwtToken(IdentityUser user)
{
var jwtTokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.UTF8.GetBytes(_configuration.GetSection("JwtConfig:Secret").Value);
var TokenDescriptor = new SecurityTokenDescriptor()
{
Subject = new ClaimsIdentity(new[]
{
new Claim("Id",user.Id),
new Claim(JwtRegisteredClaimNames.Sub,user.Email),
new Claim(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Iat,DateTime.Now.ToUniversalTime().ToString()),
}),
Expires = DateTime.Now.AddHours(1),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),SecurityAlgorithms.HmacSha256),
};
var token = jwtTokenHandler.CreateToken(TokenDescriptor);
var jwtToken = jwtTokenHandler.WriteToken(token);
return jwtToken;
}
}
}
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace JobPortalAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class BaseController : ControllerBase
{
protected IUnitOfWork _unitOfWork;
public BaseController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Build.Tasks.Deployment.Bootstrapper;
using Microsoft.EntityFrameworkCore;
using System.Xml.Linq;
using static System.Net.Mime.MediaTypeNames;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class CVsController : BaseController
{
private readonly IMapper _mapper;
protected readonly JobPortalDBContext Context;
private DbSet<Cv> _dbSet;
public CVsController(IUnitOfWork unitOfWork, IMapper mapper, JobPortalDBContext context)
: base(unitOfWork)
{
_mapper = mapper;
Context = context;
_dbSet = Context.Set<Cv>();
}
[HttpGet]
public IActionResult GetAll()
{
var Cvs = _unitOfWork.CvRepo.GetAllCvsDetails();
List<CvDto> cvDtos = new List<CvDto>();
foreach (Cv v in Cvs)
{
CvDto CvDto = new CvDto();
CvDto.Id = v.Id;
CvDto.Stages = v.Stages;
CvDto.Certificate = v.Certificate;
CvDto.PreviousWorks = v.PreviousWorks;
CvDto.Languages = v.Languages;
var jobseeker = _unitOfWork.JobSeekerRepo.GetAllWithSpecification().FirstOrDefault(js => js.Id == v.Id);
CvDto.SpecificationName = jobseeker.Specification.Name;
CvDto.Birthdate = jobseeker.Birthdate;
CvDto.Gender = jobseeker.Gender;
var person = _unitOfWork.PersonRepo.Get(v.Id);
CvDto.Email = person.Email;
CvDto.Address = person.Address;
CvDto.Name = person.Name;
CvDto.Phone = person.Phone;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
CvDto.Image = filePath;
foreach (var item in v.Cvskills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if (x != null)
{
CvDto.skills.Add(x);
}
else
{
}
}
cvDtos.Add(CvDto);
}
return Ok(cvDtos);
}
[HttpGet("GetAllApplicants/{id}")]
public IActionResult GetAllApplicants(int id)
{
var entryjobs = _unitOfWork.JobEntryRepo.GetAll().Where(e => e.JobId == id);
List<CvDto> cvDtos = new List<CvDto>();
foreach (JobEntry entry in entryjobs)
{
var v = _unitOfWork.CvRepo.GetAllCvDetails(entry.JobSeekerId);
CvDto CvDto = new CvDto();
CvDto.Id = v.Id;
CvDto.Stages = v.Stages;
CvDto.Certificate = v.Certificate;
CvDto.PreviousWorks = v.PreviousWorks;
CvDto.Languages = v.Languages;
var jobseeker = _unitOfWork.JobSeekerRepo.GetAllWithSpecification().FirstOrDefault(js => js.Id == v.Id);
CvDto.SpecificationName = jobseeker.Specification.Name;
CvDto.Birthdate = jobseeker.Birthdate;
CvDto.Gender = jobseeker.Gender;
var person = _unitOfWork.PersonRepo.Get(v.Id);
CvDto.Email = person.Email;
CvDto.Address = person.Address;
CvDto.Name = person.Name;
CvDto.Phone = person.Phone;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
CvDto.Image = filePath;
foreach (var item in v.Cvskills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if (x != null)
{
CvDto.skills.Add(x);
}
else
{
}
}
cvDtos.Add(CvDto);
}
return Ok(cvDtos);
}
[HttpGet("id")]
public async Task<IActionResult> GetCvDetailsAsync(int id )
{
var Cv = _unitOfWork.CvRepo.GetAllCvDetails(id);
CvDto CvDto = new CvDto();
CvDto.Id = id;
CvDto.Stages = Cv.Stages;
CvDto.Certificate = Cv.Certificate;
CvDto.PreviousWorks = Cv.PreviousWorks;
CvDto.Languages = Cv.Languages;
var jobseeker = _unitOfWork.JobSeekerRepo.GetAllWithSpecification().FirstOrDefault(js => js.Id == id);
CvDto.SpecificationName = jobseeker.Specification.Name;
CvDto.Birthdate = jobseeker.Birthdate;
CvDto.Gender = jobseeker.Gender;
var person = _unitOfWork.PersonRepo.Get(id);
CvDto.Email = person.Email;
CvDto.Address = person.Address;
CvDto.Name = person.Name;
CvDto.Phone = person.Phone;
var filePath = Path.Combine("Images", person.Image);
CvDto.Image = filePath;
foreach (var item in Cv.Cvskills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if(x != null)
{
CvDto.skills.Add(x);
}
else
{
}
}
return Ok(CvDto);
}
[HttpGet("GetCvSkills")]
public IActionResult GetCvSkills()
{
var Cvs = _unitOfWork.CvSkillRepo.GetAll().ToList();
return Ok(Cvs);
}
[HttpPost("AddSkill/{id}")]
public IActionResult AddSkill(int id , CvSkillDto skill )
{
if(ModelState.IsValid)
{
Boolean y = false;
var Cv = _unitOfWork.CvRepo.Get(id);
Cvskill cvskill = new Cvskill();
cvskill.Cvid = Cv.Id;
cvskill.PracticePeriod = skill.PracticePeriod;
var sk = _unitOfWork.SkillRepo.GetAll().FirstOrDefault(s => s.Name.ToUpper().Contains(skill.Name.ToUpper()));
if (sk == null)
{
Skill skl = new Skill()
{
Name = skill.Name.ToUpper()
};
_unitOfWork.SkillRepo.Add(skl);
_unitOfWork.SaveChanges();
cvskill.SkillId = skl.Id;
_unitOfWork.CvSkillRepo.Add(cvskill);
_unitOfWork.SaveChanges();
}
else
{
var x = _unitOfWork.CvSkillRepo.GetAll().FirstOrDefault(cs => cs.Cvid == id && cs.SkillId == sk.Id);
if (x == null)
{
cvskill.SkillId = sk.Id;
_unitOfWork.CvSkillRepo.Add(cvskill);
_unitOfWork.SaveChanges();
}
else
{
x.PracticePeriod = skill.PracticePeriod;
_unitOfWork.CvSkillRepo.Update(x);
_unitOfWork.SaveChanges();
y = true;
}
}
if (y == false)
{
return Ok();
}
else
{
return Ok("The skills are added, but there were skills were already exist so just updated the practice period !!!");
}
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpPut("UpdateSkill/{id}")]
public IActionResult UpdateSkill(int id, SkillDto skillDto)
{
if(ModelState.IsValid)
{
var cvskill = _unitOfWork.CvSkillRepo.GetAll().FirstOrDefault(cs => cs.Cvid == id && cs.SkillId == skillDto.SkillId);
cvskill.PracticePeriod = skillDto.PracticePeriod;
var skill = _unitOfWork.SkillRepo.GetAll().FirstOrDefault(s => s.Name.ToUpper().Contains(skillDto.Name.ToUpper()));
if (skill == null)
{
Skill sk = new Skill()
{
Name = skillDto.Name.ToUpper(),
};
_unitOfWork.SkillRepo.Add(sk);
_unitOfWork.SaveChanges();
cvskill.SkillId = sk.Id;
_unitOfWork.CvSkillRepo.Update(cvskill);
_unitOfWork.SaveChanges();
return Ok(skillDto);
}
else
{
cvskill.SkillId = skill.Id;
_unitOfWork.CvSkillRepo.Update(cvskill);
_unitOfWork.SaveChanges();
return Ok(skillDto);
}
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpDelete("DeleteSkill/{id}")]
public IActionResult DeleteSkill(int id, int skillid)
{
var cvskill = _unitOfWork.CvSkillRepo.GetAll().FirstOrDefault(cs => cs.Cvid == id && cs.SkillId == skillid);
_unitOfWork.CvSkillRepo.Remove(cvskill);
_unitOfWork.SaveChanges();
return Ok();
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class CompaniesController : BaseController
{
private readonly UserManager<IdentityUser> _userManager;
private readonly IConfiguration _configuration;
private readonly IMapper _mapper;
public CompaniesController(IUnitOfWork unitOfWork, IMapper mapper, UserManager<IdentityUser> userManager, IConfiguration configuration)
: base(unitOfWork)
{
_mapper = mapper;
_userManager = userManager;
_configuration = configuration;
}
[HttpGet]
public IActionResult GetCompanies()
{
var x = _unitOfWork.CompanyRepo.GetCompaniesDetails();
if (x != null)
{
List<CompanyDto> CompanyDtos = new List<CompanyDto>();
foreach (var company in x)
{
CompanyDto companyDto = new CompanyDto();
companyDto.Address = company.IdNavigation.Address;
companyDto.Id = company.IdNavigation.Id;
var filePath = Path.Combine("Images", company.IdNavigation.Image);
companyDto.Image = filePath;
companyDto.Phone = company.IdNavigation.Phone;
companyDto.Email = company.IdNavigation.Email;
companyDto.Description = company.Description;
companyDto.Name = company.IdNavigation.Name;
CompanyDtos.Add(companyDto);
}
return Ok(CompanyDtos);
}
else
{
return Ok("No companies exist!!!");
}
}
[HttpGet("id")]
public IActionResult GetCompany(int id)
{
var x = _unitOfWork.CompanyRepo.GetCompaniesDetails().FirstOrDefault(c => c.Id == id);
if (x != null)
{
CompanyDto companyDto = new CompanyDto();
companyDto.Address = x.IdNavigation.Address;
companyDto.Id = x.IdNavigation.Id;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", x.IdNavigation.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
companyDto.Image = filePath;
companyDto.Phone = x.IdNavigation.Phone;
companyDto.Email = x.IdNavigation.Email;
companyDto.Description = x.Description;
companyDto.Name = x.IdNavigation.Name;
return Ok(companyDto);
}
else
{
return Ok("this company doesn't exist!!!");
}
}
[HttpGet("GetCompanyNameById/id")]
public IActionResult GetCompanyNameById(int id)
{
var x = _unitOfWork.PersonRepo.Get(id);
if (x != null)
{
String name;
name = x.Name;
return Ok(name);
}
else
{
return Ok("this company doesn't exist!!!");
}
}
[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> RegiserAsync([FromForm] PersonCompanyDto dto)
{
if (ModelState.IsValid)
{
var user_exist = await _userManager.FindByEmailAsync(dto.Email);
if (user_exist != null)
{
return BadRequest
(
new AuthResult()
{
Errors = new List<string>()
{
"Email already exist"
}
}
);
}
if (!CheckPhoneNumber(dto.Phone))
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter a valid phone number" } });
}
var userid = Guid.NewGuid().ToString();
var new_user = new IdentityUser()
{
Email = dto.Email,
UserName = $"{dto.Name}{userid}"
};
var is_created = await _userManager.CreateAsync(new_user, dto.Password);
if (!(is_created.Succeeded))
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"Enter valid values"
}
}
);
}
var person = _mapper.Map<Person>(dto);
var company = _mapper.Map<Company>(dto);
string currentDirectory = Directory.GetCurrentDirectory();
if (dto.Image != null && dto.Image.Length > 0)
{
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(dto.Image.FileName);
var filePath = Path.Combine("Images", fileName);
var fullfilePath = Path.Combine("wwwroot", filePath);
var fullPath = Path.Combine(currentDirectory, fullfilePath);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
dto.Image.CopyTo(stream);
}
person.Image = fileName;
}
else
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"Image is required"
}
});
}
company.IdNavigation = person;
_unitOfWork.PersonRepo.Add(person);
_unitOfWork.CompanyRepo.Add(company);
_unitOfWork.SaveChanges();
return Ok();
}
else
{
return BadRequest(
new AuthResult()
{
Errors = new List<string>()
{
"Enter valid values"
}
}
);
}
}
[HttpPut("id")]
public async Task<IActionResult> UpdateAsync(int id, [FromForm] UpdateCompanyDto dto)
{
if (ModelState.IsValid)
{
var person = _unitOfWork.PersonRepo.Get(id);
var company = _unitOfWork.CompanyRepo.Get(id);
if (company == null || person == null)
{
return NotFound();
}
else
{
var user = await _userManager.FindByEmailAsync(person.Email);
if (user != null)
{
await _userManager.SetEmailAsync(user, dto.Email);
}
string currentDirectory = Directory.GetCurrentDirectory();
var currentImage = person.Image;
var currentImagePath = Path.Combine("Images", person.Image);
var fullcurrentImagePath = Path.Combine("wwwroot", currentImagePath);
var currentImagefullPath = Path.Combine(currentDirectory, fullcurrentImagePath); person.Address = dto.Address;
person.Email = dto.Email;
person.Phone = dto.Phone;
person.Name = dto.Name;
if (dto.Image != null && dto.Image.Length > 0)
{
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(dto.Image.FileName);
var filePath = Path.Combine("Images", fileName);
var fullfilePath = Path.Combine("wwwroot", filePath);
var fullPath = Path.Combine(currentDirectory, fullfilePath);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
dto.Image.CopyTo(stream);
}
if (!string.IsNullOrEmpty(fullcurrentImagePath) && System.IO.File.Exists(fullcurrentImagePath))
{
System.IO.File.Delete(fullcurrentImagePath);
}
person.Image = fileName;
}
else if (!string.IsNullOrEmpty(currentImage))
{
person.Image = currentImage;
}
_unitOfWork.PersonRepo.Update(person);
_unitOfWork.SaveChanges();
company.Description = dto.Description;
_unitOfWork.CompanyRepo.Update(company);
_unitOfWork.SaveChanges();
return Ok();
}
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var company = _unitOfWork.CompanyRepo.Get(id);
var person = _unitOfWork.PersonRepo.Get(id);
if (company == null || person == null)
{
return NotFound();
}
string currentDirectory = Directory.GetCurrentDirectory();
var currentImage = person.Image;
var currentImagePath = Path.Combine("Images", person.Image);
var fullcurrentImagePath = Path.Combine("wwwroot", currentImagePath);
var currentImagefullPath = Path.Combine(currentDirectory, fullcurrentImagePath);
if (!string.IsNullOrEmpty(currentImagefullPath) && System.IO.File.Exists(currentImagefullPath))
{
System.IO.File.Delete(currentImagefullPath);
}
List<Job> joblist = new List<Job>();
joblist = _unitOfWork.JobRepo.GetAll().Where(j => j.CompanyId == id).ToList();
foreach (var job in joblist)
{
var jobskillslist = _unitOfWork.JobSkillRepo.GetAll().Where(js => js.JobId == job.Id);
foreach (var jobskill in jobskillslist)
{
_unitOfWork.JobSkillRepo.Remove(jobskill);
_unitOfWork.SaveChanges();
}
_unitOfWork.JobRepo.Remove(job);
_unitOfWork.SaveChanges();
}
_unitOfWork.CompanyRepo.Remove(company);
_unitOfWork.PersonRepo.Remove(person);
_unitOfWork.SaveChanges();
return Ok();
}
bool CheckPhoneNumber(String phonenumber)
{
bool x;
if (phonenumber.Length == 10)
{
if (phonenumber[0] == '0' && phonenumber[1] == '9')
{
x = true;
return x;
}
else
{
x = false;
return x;
}
}
else
{
x = false;
return x;
}
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.Notifications;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using System.Linq;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class InterviewsController : BaseController
{
private readonly IMapper _mapper;
protected readonly JobPortalDBContext Context;
private readonly UserManager<IdentityUser> _userManager;
private readonly IHubContext<NotificationHub> _hubContext;
private readonly IConfiguration _configuration;
private DbSet<Interview> _dbSet;
public InterviewsController(IUnitOfWork unitOfWork, IMapper mapper, JobPortalDBContext context, UserManager<IdentityUser> userManager, IConfiguration configuration, IHubContext<NotificationHub> hubContext)
: base(unitOfWork)
{
_mapper = mapper;
Context = context;
_dbSet = Context.Set<Interview>();
_userManager = userManager;
_configuration = configuration;
_hubContext = hubContext;
}
[HttpGet("getAllInterviewsByJobId/{id}")]
public IActionResult getAllInterviewsByJobId(int id)
{
var interviews = _unitOfWork.InterviewRepo.GetAll().Where(n => n.JobId == id);
if (interviews != null)
{
List<InterviewDto> x = new List<InterviewDto>();
foreach (var interview in interviews)
{
InterviewDto y = new InterviewDto();
y = _mapper.Map<InterviewDto>(interview);
var job = _unitOfWork.JobRepo.Get(interview.JobId);
y.JobName = job.Name;
var person = _unitOfWork.PersonRepo.Get(y.JobSeekerId);
y.Name = person.Name;
var filePath = Path.Combine("Images", person.Image);
y.Image = filePath;
x.Add(y);
}
List<InterviewDto> z = new List<InterviewDto>();
for (int i = x.Count - 1; i >= 0; i--)
{
z.Add(x[i]);
}
return Ok(z);
}
else
{
return NotFound("you don't have any interview for this job");
}
}
[HttpGet("getNumberOfInterviewsByJobId/{id}")]
public IActionResult getNumberOfInterviewsByJobId(int id)
{
var interviews = _unitOfWork.InterviewRepo.GetAll().Where(n => n.JobId == id);
int x;
if (interviews != null)
{
x = interviews.Count();
return Ok(x);
}
else
{
return NotFound("you don't have any interview for this job");
}
}
[HttpGet("getNumberOfInterviewsByJobseekerId/{id}")]
public IActionResult getNumberOfInterviewsByJobseekerId(int id)
{
var interviews = _unitOfWork.InterviewRepo.GetAll().Where(n => n.JobSeekerId == id);
int x;
if (interviews != null)
{
x = interviews.Count();
return Ok(x);
}
else
{
return NotFound("you don't have any interview for this job");
}
}
[HttpGet("getAllInterviewsByJobseekerId/{id}")]
public IActionResult getAllInterviewsByJobseekerId(int id)
{
var interviews = _unitOfWork.InterviewRepo.GetAll().Where(n => n.JobSeekerId == id);
if (interviews != null)
{
List<InterviewDto> x = new List<InterviewDto>();
foreach (var interview in interviews)
{
InterviewDto y = new InterviewDto();
var job = _unitOfWork.JobRepo.Get(interview.JobId);
y = _mapper.Map<InterviewDto>(interview);
var person = _unitOfWork.PersonRepo.Get(y.CompanyId);
y.Name = person.Name;
y.JobName = job.Name;
var filePath = Path.Combine("Images", person.Image);
y.Image = filePath;
x.Add(y);
}
List<InterviewDto> z = new List<InterviewDto>();
for (int i = x.Count - 1; i >= 0; i--)
{
z.Add(x[i]);
}
return Ok(z);
}
else
{
return NotFound("you don't have any interview for this job");
}
}
[HttpDelete("DeleteInterview")]
public async Task<IActionResult> DeleteInterviewAsync([FromForm]InterviewDto dto)
{
if(ModelState.IsValid)
{
var inter = _unitOfWork.InterviewRepo.Get(dto.Id);
_unitOfWork.InterviewRepo.Remove(inter);
_unitOfWork.SaveChanges();
var person = _unitOfWork.PersonRepo.Get(dto.CompanyId);
var job = _unitOfWork.JobRepo.Get(dto.JobId);
Notification notification = new Notification();
notification.JobSeekerId = dto.JobSeekerId;
notification.CompanyId = dto.CompanyId;
notification.JobId = dto.JobId;
notification.ToCompany = false;
notification.IsRead = false;
notification.Date = DateTime.Now;
String details = $"Hello, {dto.Name},the {person.Name} company canceled your interview for {job.Name} work. ";
notification.Details = details;
_unitOfWork.NotificationRepo.Add(notification);
_unitOfWork.SaveChanges();
await _hubContext.Clients.Group($"jobseekerId_{dto.JobSeekerId}").SendAsync("ReceiveNotification", "new notification message");
return Ok();
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpPut("UpdateInterview")]
public async Task<IActionResult> UpdateInterviewAsync([FromForm] UpdateInterviewDto dto)
{
if(ModelState.IsValid)
{
var inter = _unitOfWork.InterviewRepo.Get(dto.Id);
var companyperson = _unitOfWork.PersonRepo.Get(inter.CompanyId);
var job = _unitOfWork.JobRepo.Get(inter.JobId);
var jobseekerperson = _unitOfWork.PersonRepo.Get(inter.JobSeekerId);
inter.Date = dto.Date;
inter.Address = dto.Address;
_unitOfWork.InterviewRepo.Update(inter);
_unitOfWork.SaveChanges();
Notification notification = new Notification();
notification.JobSeekerId = inter.JobSeekerId;
notification.CompanyId = inter.CompanyId;
notification.JobId = inter.JobId;
notification.ToCompany = false;
notification.IsRead = false;
notification.Date = DateTime.Now;
String details = $"Hello, {jobseekerperson.Name},the {companyperson.Name} company updated your interview for {job.Name} work to : \n\nDate: {dto.Date} \nAddress: {dto.Address} ";
notification.Details = details;
_unitOfWork.NotificationRepo.Add(notification);
_unitOfWork.SaveChanges();
await _hubContext.Clients.Group($"jobseekerId_{jobseekerperson.Id}").SendAsync("ReceiveNotification", "new notification message");
return Ok();
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpPost("BookInterview")]
public async Task<IActionResult> BookInterviewAsync([FromForm]BookInterviewDto dto)
{
if(ModelState.IsValid)
{
var jobseeker = _unitOfWork.PersonRepo.Get(dto.JobSeekerId);
var company = _unitOfWork.PersonRepo.Get(dto.CompanyId);
var job = _unitOfWork.JobRepo.Get(dto.JobId);
Interview interview = new Interview();
interview = _mapper.Map<Interview>(dto);
_unitOfWork.InterviewRepo.Add(interview);
_unitOfWork.SaveChanges();
Notification notification = new Notification();
notification.JobId = dto.JobId;
notification.JobSeekerId = dto.JobSeekerId;
notification.CompanyId = dto.CompanyId;
notification.IsRead = false;
notification.ToCompany = false;
notification.Date = DateTime.Now;
String details = $"Hello {jobseeker.Name}, we are {company.Name} company, We have booked an appointment for you to conduct an interview for {job.Name} work at : \n\nDate: {dto.Date} \nAddress: {dto.Address}";
notification.Details = details;
_unitOfWork.NotificationRepo.Add(notification);
_unitOfWork.SaveChanges();
await _hubContext.Clients.Group($"jobseekerId_{dto.JobSeekerId}").SendAsync("ReceiveNotification", "new notification message");
return Ok();
}
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Build.Tasks.Deployment.Bootstrapper;
using Microsoft.EntityFrameworkCore;
using System;
using System.Text.Json.Serialization;
using System.Text.Json;
using System.Net;
using Microsoft.AspNetCore.Identity;
using JobPortalAPI.Notifications;
using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authentication.JwtBearer;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class JobSeekersController : BaseController
{
private readonly IMapper _mapper;
protected readonly JobPortalDBContext Context;
private readonly UserManager<IdentityUser> _userManager;
private readonly IHubContext<NotificationHub> _hubContext;
private readonly IConfiguration _configuration;
private DbSet<JobSeeker> _dbSet;
public JobSeekersController(IUnitOfWork unitOfWork, IMapper mapper, JobPortalDBContext context, UserManager<IdentityUser> userManager, IConfiguration configuration, IHubContext<NotificationHub> hubContext)
: base(unitOfWork)
{
_mapper = mapper;
Context = context;
_dbSet = Context.Set<JobSeeker>();
_userManager = userManager;
_configuration = configuration;
_hubContext = hubContext;
}
[HttpGet]
public IActionResult GetJobSeekers()
{
var jobSeekers = _unitOfWork.JobSeekerRepo.GetAllDetails();
if (jobSeekers != null)
{
List<JobSeekerDto> x = new List<JobSeekerDto>();
x = _mapper.Map<List<JobSeekerDto>>(jobSeekers);
return Ok(x);
}
else
{
return NotFound("xxxxxxxxxxxxxx");
}
}
[HttpGet("GetJobseekerNameById/{id}")]
public IActionResult GetJobseekerNameById(int id)
{
var x = _unitOfWork.PersonRepo.Get(id);
if (x != null)
{
String name;
name = x.Name;
return Ok(name);
}
else
{
return Ok("this jobseeker doesn't exist!!!");
}
}
[HttpGet("isApplied/{jobId}/{jobSeekerId}")]
public IActionResult isApplied(int jobId, int jobSeekerId)
{
if(ModelState.IsValid)
{
bool x;
var entyJob = _unitOfWork.JobEntryRepo.GetAll().FirstOrDefault(e => e.JobId == jobId && e.JobSeekerId == jobSeekerId);
if (entyJob != null)
{
x = true;
}
else
{
x = false;
}
return Ok(x);
}
else
{
return BadRequest();
}
}
[HttpGet("isBooked/{jobId}/{jobSeekerId}")]
public IActionResult isBooked(int jobId, int jobSeekerId)
{
if (ModelState.IsValid)
{
InterviewDto inter = new InterviewDto();
var interview = _unitOfWork.InterviewRepo.GetAll().FirstOrDefault(i => i.JobId == jobId && i.JobSeekerId == jobSeekerId);
if (interview != null)
{
var jobseeker = _unitOfWork.PersonRepo.Get(interview.JobSeekerId);
var company = _unitOfWork.PersonRepo.Get(interview.CompanyId);
var job = _unitOfWork.JobRepo.Get(interview.JobId);
inter = _mapper.Map<InterviewDto>(interview);
inter.Name = jobseeker.Name;
var filePath = Path.Combine("Images", jobseeker.Image);
inter.Image = filePath;
return Ok(inter);
}
return Ok();
}
else
{
return BadRequest();
}
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var jobseeker = _unitOfWork.JobSeekerRepo.GetAllDetails().FirstOrDefault(js => js.Id == id);
JobSeekerDto x = new JobSeekerDto();
if (jobseeker == null)
{
return NotFound();
}
else
{
x = _mapper.Map<JobSeekerDto>(jobseeker);
}
return Ok(x);
}
[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> Register([FromForm] PersonJobSeekerDto dto)
{
if (ModelState.IsValid)
{
var user_exist = await _userManager.FindByEmailAsync(dto.Email);
if (user_exist != null)
{
return BadRequest
(
new AuthResult()
{
result = false,
Errors = new List<string>()
{
"Email already exist"
}
}
);
}
if (!CheckPhoneNumber(dto.Phone))
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter a valid phone number" } });
}
var userid = Guid.NewGuid().ToString();
var new_user = new IdentityUser()
{
Email = dto.Email,
UserName = $"{dto.Name}{userid}"
};
var is_created = await _userManager.CreateAsync(new_user, dto.Password);
if (!(is_created.Succeeded))
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter a valid password" } });
}
var person = _mapper.Map<Person>(dto);
var jobSeeker = _mapper.Map<JobSeeker>(dto);
var cv = _mapper.Map<Cv>(dto);
string currentDirectory = Directory.GetCurrentDirectory();
if (dto.Image != null && dto.Image.Length > 0)
{
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(dto.Image.FileName);
var filePath = Path.Combine("Images", fileName);
var fullfilePath = Path.Combine("wwwroot", filePath);
var fullPath = Path.Combine(currentDirectory, fullfilePath);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
dto.Image.CopyTo(stream);
}
person.Image = fileName;
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Image is required" } });
}
jobSeeker.IdNavigation = person;
var specification = _unitOfWork.SpecificationRepo.GetAll().FirstOrDefault(s => s.Name == dto.SpecificationName.ToUpper());
if (specification == null)
{
specification = new Specification
{
Name = dto.SpecificationName.ToUpper()
};
_unitOfWork.SpecificationRepo.Add(specification);
_unitOfWork.SaveChanges();
}
jobSeeker.Specification = specification;
jobSeeker.SpecificationId = specification.Id;
jobSeeker.Cv = cv;
cv.IdNavigation = jobSeeker;
_unitOfWork.PersonRepo.Add(person);
_unitOfWork.SaveChanges();
_unitOfWork.CvRepo.Add(cv);
_unitOfWork.SaveChanges();
return Ok();
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpPut("{id}")]
public async Task<IActionResult> updateAsync(int id ,[FromForm] UpdateJobseekerDto dto)
{
if (ModelState.IsValid)
{
var person = _unitOfWork.PersonRepo.Get(id);
var jobseeker = _unitOfWork.JobSeekerRepo.GetAllWithSpecification().FirstOrDefault(js => js.Id == id);
var cv = _unitOfWork.CvRepo.Get(id);
if (jobseeker == null || person == null || cv == null)
{
return NotFound();
}
else
{
string currentDirectory = Directory.GetCurrentDirectory();
var currentImage = person.Image;
var currentImagePath = Path.Combine("Images", person.Image);
var fullcurrentImagePath = Path.Combine("wwwroot", currentImagePath);
var currentImagefullPath = Path.Combine(currentDirectory, fullcurrentImagePath);
person.Address = dto.Address;
var user = await _userManager.FindByEmailAsync(person.Email);
if (user != null)
{
await _userManager.SetEmailAsync(user, dto.Email);
}
person.Email = dto.Email;
person.Phone = dto.Phone;
person.Name = dto.Name;
if (dto.Image != null && dto.Image.Length > 0)
{
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(dto.Image.FileName);
var filePath = Path.Combine("Images", fileName);
var fullfilePath = Path.Combine("wwwroot", filePath);
var fullPath = Path.Combine(currentDirectory, fullfilePath);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
dto.Image.CopyTo(stream);
}
if (!string.IsNullOrEmpty(currentImagefullPath) && System.IO.File.Exists(currentImagefullPath))
{
System.IO.File.Delete(currentImagefullPath);
}
person.Image = fileName;
}
else if (!string.IsNullOrEmpty(currentImage))
{
person.Image = currentImage;
}
_unitOfWork.PersonRepo.Update(person);
_unitOfWork.SaveChanges();
jobseeker.Birthdate= dto.Birthdate;
jobseeker.Gender = dto.Gender;
cv.PreviousWorks = dto.PreviousWorks;
cv.Stages = dto.Stages;
cv.Certificate = dto.Certificate;
cv.Languages = dto.Languages;
jobseeker.Cv = cv;
if (dto.SpecificationName != null && dto.SpecificationName != jobseeker.Specification.Name.ToUpper())
{
var specification = _unitOfWork.SpecificationRepo.GetAll().FirstOrDefault(s => s.Name == dto.SpecificationName.ToUpper());
if (specification == null)
{
specification = new Specification
{
Name = dto.SpecificationName.ToUpper()
};
_unitOfWork.SpecificationRepo.Add(specification);
_unitOfWork.SaveChanges();
jobseeker.Specification = specification;
jobseeker.SpecificationId = specification.Id;
}
else
{
jobseeker.Specification = specification;
jobseeker.SpecificationId = specification.Id;
}
}
_unitOfWork.JobSeekerRepo.Update(jobseeker);
_unitOfWork.SaveChanges();
return Ok();
}
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var jobseeker = _unitOfWork.JobSeekerRepo.Get(id);
var person = _unitOfWork.PersonRepo.Get(id);
var cv = _unitOfWork.CvRepo.Get(id);
if (jobseeker == null || cv == null || person == null)
{
return NotFound();
}
string currentDirectory = Directory.GetCurrentDirectory();
var currentImage = person.Image;
var currentImagePath = Path.Combine("Images", person.Image);
var fullcurrentImagePath = Path.Combine("wwwroot", currentImagePath);
var currentImagefullPath = Path.Combine(currentDirectory, fullcurrentImagePath);
if (!string.IsNullOrEmpty(currentImagefullPath) && System.IO.File.Exists(currentImagefullPath))
{
System.IO.File.Delete(currentImagefullPath);
}
var x = _unitOfWork.CvSkillRepo.GetAll().Where(cs => cs.Cvid == id);
foreach (var cs in x)
{
_unitOfWork.CvSkillRepo.Remove(cs);
_unitOfWork.SaveChanges();
}
_unitOfWork.CvRepo.Remove(cv);
_unitOfWork.JobSeekerRepo.Remove(jobseeker);
_unitOfWork.PersonRepo.Remove(person);
_unitOfWork.SaveChanges();
return Ok();
}
[HttpPost("AddJobRequest")]
public async Task<IActionResult> AddJobRequestAsync(JobRequestDto dto)
{
if(ModelState.IsValid)
{
var job = _unitOfWork.JobRepo.Get(dto.JobId);
var jobseeker = _unitOfWork.JobSeekerRepo.GetAllDetails().FirstOrDefault(js => js.Id == dto.JobSeekerId);
JobEntry jobEntry = new JobEntry();
jobEntry.JobSeekerId = dto.JobSeekerId;
jobEntry.JobId = dto.JobId;
jobEntry.Date = DateTime.Now;
_unitOfWork.JobEntryRepo.Add(jobEntry);
_unitOfWork.SaveChanges();
Notification notification = new Notification();
notification.JobSeekerId = dto.JobSeekerId;
notification.CompanyId = job.CompanyId;
notification.JobId = job.Id;
notification.ToCompany = true;
notification.IsRead = false;
notification.Date = DateTime.Now;
String details = $"Hello, my name is {jobseeker.IdNavigation.Name}, and I want to apply for {job.Name} work, so please book an interview for me";
notification.Details = details;
_unitOfWork.NotificationRepo.Add(notification);
_unitOfWork.SaveChanges();
await _hubContext.Clients.Group($"companyId_{job.CompanyId}").SendAsync("ReceiveNotification", "new notification message");
return Ok(notification.Id);
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpDelete("RemoveJobRequest")]
public IActionResult RemoveJobRequest(JobRequestDto dto)
{
if(ModelState.IsValid)
{
var jobEntry = _unitOfWork.JobEntryRepo.GetAll().FirstOrDefault(j => j.JobId == dto.JobId && j.JobSeekerId == dto.JobSeekerId);
_unitOfWork.JobEntryRepo.Remove(jobEntry);
_unitOfWork.SaveChanges();
var job = _unitOfWork.JobRepo.Get(dto.JobId);
var notification = _unitOfWork.NotificationRepo.GetAll().FirstOrDefault(n => n.JobSeekerId == dto.JobSeekerId && n.CompanyId == job.CompanyId && n.JobId == dto.JobId && n.ToCompany == true);
if(notification != null)
{
var note = _unitOfWork.NotificationRepo.Get(notification.Id);
_unitOfWork.NotificationRepo.Remove(note);
_unitOfWork.SaveChanges();
return Ok(note.Id);
}
}
return BadRequest(new AuthResult()
{
Errors = new List<string>()
{
"Enter valid values"
}
});
}
bool CheckPhoneNumber(String phonenumber)
{
bool x;
if (phonenumber.Length == 10)
{
if (phonenumber[0] == '0' && phonenumber[1] == '9')
{
x = true;
return x;
}
else
{
x = false;
return x;
}
}
else
{
x = false;
return x;
}
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class JobsController : BaseController
{
private readonly IMapper _mapper;
public JobsController(IUnitOfWork unitOfWork, IMapper mapper)
: base(unitOfWork)
{
_mapper = mapper;
}
[HttpGet("GetNumberOfJobSeekers/{id}")]
public IActionResult GetNumberOfJobSeeker(int id )
{
var entries = _unitOfWork.JobEntryRepo.GetAll().Where(e => e.JobId == id);
int x = entries.Count();
return Ok(x);
}
[HttpGet]
public IActionResult GetAll()
{
var Jobs = _unitOfWork.JobRepo.GetAllJobsDetails().Where(j=> j.Status == "ON");
List<JobDetailsDto> JobDetailsDtos = new List<JobDetailsDto>();
foreach (Job v in Jobs)
{
JobDetailsDto JobDetailsDto = new JobDetailsDto();
JobDetailsDto.Id = v.Id;
JobDetailsDto.Name = v.Name;
JobDetailsDto.Sallary = v.Sallary;
JobDetailsDto.Status = v.Status;
JobDetailsDto.Description = v.Description;
JobDetailsDto.TimeType = v.TimeType;
JobDetailsDto.CompanyId = v.CompanyId;
var person = _unitOfWork.PersonRepo.Get(v.CompanyId);
JobDetailsDto.CompanyName = person.Name;
JobDetailsDto.Phone = person.Phone;
JobDetailsDto.Email = person.Email;
var specification = _unitOfWork.SpecificationRepo.Get(v.SpecificationId);
JobDetailsDto.SpecificationName = specification.Name;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
JobDetailsDto.Image = filePath;
foreach (var item in v.JobSkills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if (x != null)
{
JobDetailsDto.skills.Add(x);
}
}
JobDetailsDtos.Add(JobDetailsDto);
}
return Ok(JobDetailsDtos);
}
[HttpGet("GetAllJobsByCompanyId")]
public IActionResult GetAllJobsByCompanyId(int id)
{
var Jobs = _unitOfWork.JobRepo.GetAllJobsDetailsByCompanyId(id);
List<JobDetailsDto> JobDetailsDtos = new List<JobDetailsDto>();
foreach (Job v in Jobs)
{
JobDetailsDto JobDetailsDto = new JobDetailsDto();
JobDetailsDto.Id = v.Id;
JobDetailsDto.Name = v.Name;
JobDetailsDto.Sallary = v.Sallary;
JobDetailsDto.Status = v.Status;
JobDetailsDto.Description = v.Description;
JobDetailsDto.TimeType = v.TimeType;
JobDetailsDto.CompanyId = v.CompanyId;
var person = _unitOfWork.PersonRepo.Get(v.CompanyId);
JobDetailsDto.CompanyName = person.Name;
JobDetailsDto.Phone = person.Phone;
JobDetailsDto.Email = person.Email;
var specification = _unitOfWork.SpecificationRepo.Get(v.SpecificationId);
JobDetailsDto.SpecificationName = specification.Name;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
JobDetailsDto.Image = filePath;
foreach (var item in v.JobSkills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if (x != null)
{
JobDetailsDto.skills.Add(x);
}
}
JobDetailsDtos.Add(JobDetailsDto);
}
return Ok(JobDetailsDtos);
}
[HttpGet("GetAllJobsByJobseekerId")]
public IActionResult GetAllJobsByJobseekerId(int id)
{
var entries = _unitOfWork.JobEntryRepo.GetAll().Where(e => e.JobSeekerId == id);
//var Jobs = _unitOfWork.JobRepo.GetAllJobsDetailsByCompanyId(id);
List<JobDetailsDto> JobDetailsDtos = new List<JobDetailsDto>();
foreach (JobEntry entry in entries)
{
var v = _unitOfWork.JobRepo.GetAllJobDetails(entry.JobId);
var person = _unitOfWork.PersonRepo.Get(v.CompanyId);
JobDetailsDto JobDetailsDto = new JobDetailsDto();
JobDetailsDto.Id = v.Id;
JobDetailsDto.Name = v.Name;
JobDetailsDto.Sallary = v.Sallary;
JobDetailsDto.Status = v.Status;
JobDetailsDto.Description = v.Description;
JobDetailsDto.TimeType = v.TimeType;
JobDetailsDto.CompanyId = v.CompanyId;
JobDetailsDto.CompanyName = person.Name;
JobDetailsDto.Phone = person.Phone;
JobDetailsDto.Email = person.Email;
var specification = _unitOfWork.SpecificationRepo.Get(v.SpecificationId);
JobDetailsDto.SpecificationName = specification.Name;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
JobDetailsDto.Image = filePath;
foreach (var item in v.JobSkills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if (x != null)
{
JobDetailsDto.skills.Add(x);
}
}
JobDetailsDtos.Add(JobDetailsDto);
}
return Ok(JobDetailsDtos);
}
[HttpGet("id")]
public IActionResult GetById(int id)
{
var Job = _unitOfWork.JobRepo.GetAllJobDetails(id);
JobDetailsDto JobDetailsDto = new JobDetailsDto();
JobDetailsDto.Id = Job.Id;
JobDetailsDto.Name = Job.Name;
JobDetailsDto.Sallary = Job.Sallary;
JobDetailsDto.Status = Job.Status;
JobDetailsDto.Description = Job.Description;
JobDetailsDto.TimeType = Job.TimeType;
JobDetailsDto.CompanyId = Job.CompanyId;
var person = _unitOfWork.PersonRepo.Get(Job.CompanyId);
JobDetailsDto.CompanyName = person.Name;
JobDetailsDto.Phone = person.Phone;
JobDetailsDto.Email = person.Email;
var specification = _unitOfWork.SpecificationRepo.Get(Job.SpecificationId);
JobDetailsDto.SpecificationName = specification.Name;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
JobDetailsDto.Image = filePath;
foreach (var item in Job.JobSkills)
{
SkillDto x = new SkillDto();
x.PracticePeriod = item.PracticePeriod;
var skill = _unitOfWork.SkillRepo.Get(item.SkillId);
x.SkillId = skill.Id;
x.Name = skill.Name;
if (x != null)
{
JobDetailsDto.skills.Add(x);
}
}
return Ok(JobDetailsDto);
}
[HttpPost("CreateJob")]
public IActionResult CreateJob([FromForm] JobDto dto)
{
if (ModelState.IsValid)
{
Job job = _mapper.Map<Job>(dto);
var specification = _unitOfWork.SpecificationRepo.GetAll().FirstOrDefault(s => s.Name == dto.SpecificationName.ToUpper());
if (specification == null)
{
specification = new Specification
{
Name = dto.SpecificationName.ToUpper()
};
_unitOfWork.SpecificationRepo.Add(specification);
_unitOfWork.SaveChanges();
job.Specification = specification;
job.SpecificationId = specification.Id;
}
else
{
job.Specification = specification;
job.SpecificationId = specification.Id;
}
_unitOfWork.JobRepo.Add(job);
_unitOfWork.SaveChanges();
return Ok();
}
else
{
return BadRequest();
}
}
[HttpPut("UpdateJob/{id}")]
public IActionResult UpdateJob(int id ,[FromForm] JobDto dto)
{
if (ModelState.IsValid)
{
var job = _unitOfWork.JobRepo.Get(id);
_mapper.Map(dto, job);
var specification = _unitOfWork.SpecificationRepo.GetAll().FirstOrDefault(s => s.Name == dto.SpecificationName.ToUpper());
if (specification == null)
{
specification = new Specification
{
Name = dto.SpecificationName.ToUpper()
};
_unitOfWork.SpecificationRepo.Add(specification);
_unitOfWork.SaveChanges();
job.Specification = specification;
job.SpecificationId = specification.Id;
}
else
{
job.Specification = specification;
job.SpecificationId = specification.Id;
}
_unitOfWork.JobRepo.Update(job);
_unitOfWork.SaveChanges();
return Ok();
}
else
{
return BadRequest();
}
}
[HttpDelete("DeleteJob/{id}")]
public IActionResult DeleteJob(int id)
{
var job = _unitOfWork.JobRepo.Get(id);
if (job == null)
{
return NotFound();
}
var jobskills = _unitOfWork.JobSkillRepo.GetAll().Where(js => js.JobId == id);
foreach(var js in jobskills)
{
_unitOfWork.JobSkillRepo.Remove(js);
_unitOfWork.SaveChanges();
}
var interviews = _unitOfWork.InterviewRepo.GetAll().Where(i => i.JobId == id);
foreach (var i in interviews)
{
_unitOfWork.InterviewRepo.Remove(i);
_unitOfWork.SaveChanges();
}
var jobentries = _unitOfWork.JobEntryRepo.GetAll().Where(j => j.JobId == id);
foreach (var e in jobentries)
{
_unitOfWork.JobEntryRepo.Remove(e);
_unitOfWork.SaveChanges();
}
var notifications = _unitOfWork.NotificationRepo.GetAll().Where(n => n.JobId == id);
foreach (var n in notifications)
{
_unitOfWork.NotificationRepo.Remove(n);
_unitOfWork.SaveChanges();
}
_unitOfWork.JobRepo.Remove(job);
_unitOfWork.SaveChanges();
return Ok();
}
[HttpPost("AddSkills/{id}")]
public IActionResult AddSkills(int id, JobSkillDto Myskill)
{
if(ModelState.IsValid)
{
Boolean y = false;
var job = _unitOfWork.JobRepo.Get(id);
JobSkill Jobskill = new JobSkill();
Jobskill.JobId = job.Id;
Jobskill.PracticePeriod = Myskill.PracticePeriod;
var sk = _unitOfWork.SkillRepo.GetAll().FirstOrDefault(s => s.Name.ToUpper().Contains(Myskill.Name.ToUpper()));
if (sk == null)
{
Skill skill = new Skill()
{
Name = Myskill.Name.ToUpper(),
};
_unitOfWork.SkillRepo.Add(skill);
_unitOfWork.SaveChanges();
Jobskill.SkillId = skill.Id;
_unitOfWork.JobSkillRepo.Add(Jobskill);
_unitOfWork.SaveChanges();
}
else
{
var x = _unitOfWork.JobSkillRepo.GetAll().FirstOrDefault(j => j.JobId == id && j.SkillId == sk.Id);
if (x == null)
{
Jobskill.SkillId = sk.Id;
_unitOfWork.JobSkillRepo.Add(Jobskill);
_unitOfWork.SaveChanges();
}
else
{
x.PracticePeriod = Myskill.PracticePeriod;
_unitOfWork.JobSkillRepo.Update(x);
_unitOfWork.SaveChanges();
y = true;
}
}
if (y == false)
{
return Ok();
}
else
{
return Ok("The skills are added, but there were skills already exist so just updated the practice period !!!");
}
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpPut("UpdateSkill/{id}")]
public IActionResult UpdateSkill(int id, SkillDto skillDto)
{
if(ModelState.IsValid)
{
var jobskill = _unitOfWork.JobSkillRepo.GetAll().FirstOrDefault(js => js.JobId == id && js.SkillId == skillDto.SkillId);
jobskill.PracticePeriod = skillDto.PracticePeriod;
var skill = _unitOfWork.SkillRepo.GetAll().FirstOrDefault(s => s.Name.ToUpper().Contains(skillDto.Name.ToUpper()));
if (skill == null)
{
Skill sk = new Skill()
{
Name = skillDto.Name.ToUpper(),
};
_unitOfWork.SkillRepo.Add(sk);
_unitOfWork.SaveChanges();
jobskill.SkillId = sk.Id;
_unitOfWork.JobSkillRepo.Update(jobskill);
_unitOfWork.SaveChanges();
return Ok();
}
else
{
jobskill.SkillId = skill.Id;
_unitOfWork.JobSkillRepo.Update(jobskill);
_unitOfWork.SaveChanges();
return Ok();
}
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpDelete("DeleteSkill/{id}")]
public IActionResult DeleteSkill(int id, int skillid)
{
var jobskill = _unitOfWork.JobSkillRepo.GetAll().FirstOrDefault(js => js.JobId == id && js.SkillId == skillid);
_unitOfWork.JobSkillRepo.Remove(jobskill);
_unitOfWork.SaveChanges();
return Ok();
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.Notifications;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class NotificationsController : BaseController
{
private readonly IMapper _mapper;
protected readonly JobPortalDBContext Context;
private readonly UserManager<IdentityUser> _userManager;
private readonly IHubContext<NotificationHub> _hubContext;
private readonly IConfiguration _configuration;
private DbSet<Notification> _dbSet;
public NotificationsController(IUnitOfWork unitOfWork, IMapper mapper, JobPortalDBContext context, UserManager<IdentityUser> userManager, IConfiguration configuration, IHubContext<NotificationHub> hubContext)
: base(unitOfWork)
{
_mapper = mapper;
Context = context;
_dbSet = Context.Set<Notification>();
_userManager = userManager;
_configuration = configuration;
_hubContext = hubContext;
}
[HttpGet("GetCompanyNotificationById/{id}")]
public IActionResult GetCompanyNotificationById(int id)
{
var notifications = _unitOfWork.NotificationRepo.GetAll().Where(n => n.CompanyId == id && n.ToCompany == true);
if (notifications != null)
{
List<NotificationDto> x = new List<NotificationDto>();
NotificationDto y = new NotificationDto();
foreach (var not in notifications)
{
not.IsRead = true;
_unitOfWork.NotificationRepo.Update(not);
_unitOfWork.SaveChanges();
y = _mapper.Map<NotificationDto>(not);
var person = _unitOfWork.PersonRepo.Get(not.JobSeekerId);
y.Name = person.Name;
var filePath = Path.Combine("Images", person.Image);
y.Image = filePath;
x.Add(y);
}
List<NotificationDto> z = new List<NotificationDto>();
for(int i = x.Count - 1 ; i >= 0; i--)
{
z.Add(x[i]);
}
return Ok(z); }
else
{
return NotFound("you don't have any notifications");
}
}
[HttpGet("GetJobseekerNotificationById/{id}")]
public IActionResult GetJobseekerNotificationById(int id)
{
var notifications = _unitOfWork.NotificationRepo.GetAll().Where(n => n.JobSeekerId == id && n.ToCompany== false);
if (notifications != null)
{
List<NotificationDto> x = new List<NotificationDto>();
NotificationDto y = new NotificationDto();
foreach (var not in notifications)
{
not.IsRead = true;
_unitOfWork.NotificationRepo.Update(not);
_unitOfWork.SaveChanges();
y = _mapper.Map<NotificationDto>(not);
var person = _unitOfWork.PersonRepo.Get(not.CompanyId);
y.Name = person.Name;
//string currentDirectory = Directory.GetCurrentDirectory();
var filePath = Path.Combine("Images", person.Image);
//var fullPath = Path.Combine(currentDirectory, filePath);
//byte[] myimage = System.IO.File.ReadAllBytes(fullPath);
y.Image = filePath;
x.Add(y);
}
List<NotificationDto> z = new List<NotificationDto>();
for(int i = x.Count - 1 ; i >= 0; i--)
{
z.Add(x[i]);
}
return Ok(z);
}
else
{
return NotFound("you don't have any notifications");
}
}
[HttpGet("GetNumberOfCompanyNotifications/{id}")]
public IActionResult GetNumberOfCompanyNotifications(int id)
{
var entries = _unitOfWork.NotificationRepo.GetAll().Where(e => e.CompanyId == id && e.IsRead == false && e.ToCompany==true);
int x = entries.Count();
return Ok(x);
}
[HttpGet("GetNumberOfJobseekerNotifications/{id}")]
public IActionResult GetNumberOfJobseekerNotifications(int id)
{
var entries = _unitOfWork.NotificationRepo.GetAll().Where(e => e.JobSeekerId == id && e.IsRead == false && e.ToCompany == false);
int x = entries.Count();
return Ok(x);
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Build.Tasks.Deployment.Bootstrapper;
using Microsoft.EntityFrameworkCore;
using System.Xml;
using static System.Net.Mime.MediaTypeNames;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class PersonsController : BaseController
{
private readonly IMapper _mapper;
public PersonsController(IUnitOfWork unitOfWork, IMapper mapper)
: base(unitOfWork)
{
_mapper = mapper;
}
[HttpGet]
public IActionResult GetAll()
{
var persons = _unitOfWork.PersonRepo.GetAll().ToList();
//var persons = _unitOfWork.PersonRepo.GetAllWithJobSeekers().ToList();
return Ok(persons);
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var person = _unitOfWork.PersonRepo.Get(id);
if (person == null)
{
return NotFound();
}
return Ok(person);
}
[HttpPost]
public IActionResult Create([FromForm] PersonDto dto)
{
if (ModelState.IsValid)
{
var person = _mapper.Map<Person>(dto);
if (dto.Image != null && dto.Image.Length > 0)
{
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(dto.Image.FileName);
var filePath = fileName;
var fullPath = Path.Combine(@"A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\Images", filePath);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
dto.Image.CopyTo(stream);
}
person.Image = filePath;
}
else
{
return BadRequest("Image is required");
}
_unitOfWork.PersonRepo.Add(person);
_unitOfWork.SaveChanges();
return Ok(person);
}
else
{
return BadRequest("Invalid Request");
}
}
[HttpPut("{id}")]
public IActionResult Update(int id, [FromForm] PersonDto dto)
{
var person = _unitOfWork.PersonRepo.Get(id);
if (person == null)
{
return NotFound();
}
else
{
var currentImage = Path.Combine(@"A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\Images", person.Image);
_mapper.Map<PersonDto, Person>(dto, person);
if (dto.Image != null && dto.Image.Length > 0)
{
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(dto.Image.FileName);
var filePath = fileName;
var fullPath = Path.Combine(@"A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\Images", filePath);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
dto.Image.CopyTo(stream);
}
if (!string.IsNullOrEmpty(currentImage) && System.IO.File.Exists(currentImage))
{
System.IO.File.Delete(currentImage);
}
person.Image = filePath;
}
else if (!string.IsNullOrEmpty(currentImage))
{
person.Image = currentImage;
}
else
{
return BadRequest("Image is required");
}
_unitOfWork.PersonRepo.Update(person);
_unitOfWork.SaveChanges();
return Ok(person);
}
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var person = _unitOfWork.PersonRepo.Get(id);
if (person == null)
{
return NotFound();
}
_unitOfWork.PersonRepo.Remove(person);
_unitOfWork.SaveChanges();
return Ok();
}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class SkillsController : BaseController
{
private readonly IMapper _mapper;
public SkillsController(IUnitOfWork unitOfWork, IMapper mapper)
: base(unitOfWork)
{
_mapper = mapper;
}
[HttpGet]
public IActionResult GetAll()
{
var skills = _unitOfWork.SkillRepo.GetAll().ToList();
return Ok(skills);
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var skill = _unitOfWork.SkillRepo.Get(id);
if (skill == null)
{
return NotFound();
}
return Ok(skill);
}
[HttpPost]
public IActionResult Create(String skillname)
{
if (ModelState.IsValid)
{
Skill skill = new Skill();
skill.Name = skillname.ToUpper();
_unitOfWork.SkillRepo.Add(skill);
_unitOfWork.SaveChanges();
return Ok(skill);
}
else
{
return BadRequest("Invalid Request");
}
}
[HttpPut("{id}")]
public IActionResult Update(int id, String skillname)
{
var skill = _unitOfWork.SkillRepo.Get(id);
if (skill == null)
{
return NotFound();
}
else
{
skill.Name = skillname.ToUpper();
_unitOfWork.SkillRepo.Update(skill);
_unitOfWork.SaveChanges();
return Ok(skill);
}
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var skill = _unitOfWork.SkillRepo.Get(id);
if (skill == null)
{
return NotFound();
}
_unitOfWork.SkillRepo.Remove(skill);
_unitOfWork.SaveChanges();
return Ok();
}
//[HttpGet("test")]
//public IActionResult test()
//{
// return Ok("success");
//}
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace JobPortalAPI.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
[ApiController]
public class SpecificationsController : BaseController
{
private readonly IMapper _mapper;
public SpecificationsController(IUnitOfWork unitOfWork, IMapper mapper)
: base(unitOfWork)
{
_mapper = mapper;
}
[AllowAnonymous]
[HttpGet]
public IActionResult GetAll()
{
var specifications = _unitOfWork.SpecificationRepo.GetAll().ToList();
return Ok(specifications);
}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var specification = _unitOfWork.SpecificationRepo.Get(id);
if (specification == null)
{
return NotFound();
}
return Ok(specification);
}
[AllowAnonymous]
[HttpPost]
public IActionResult Create(String specificationName)
{
if (ModelState.IsValid)
{
var x = _unitOfWork.SpecificationRepo.GetAll().FirstOrDefault(s => s.Name.ToUpper().Contains(specificationName.ToUpper()));
if(x == null)
{
Specification specification = new Specification();
specification.Name = specificationName.ToUpper();
_unitOfWork.SpecificationRepo.Add(specification);
_unitOfWork.SaveChanges();
return Ok(specification);
}
return BadRequest("this specification is already exist");
}
else
{
return BadRequest(new AuthResult() { Errors = new List<string>() { "Enter valid values" } });
}
}
[HttpPut("{id}")]
public IActionResult Update(int id, String specificationName)
{
var specification = _unitOfWork.SpecificationRepo.Get(id);
if (specification == null)
{
return NotFound();
}
else
{
specification.Name = specificationName.ToUpper();
_unitOfWork.SpecificationRepo.Update(specification);
_unitOfWork.SaveChanges();
return Ok(specification);
}
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var specification = _unitOfWork.SpecificationRepo.Get(id);
if (specification == null)
{
return NotFound();
}
_unitOfWork.SpecificationRepo.Remove(specification);
_unitOfWork.SaveChanges();
return Ok();
}
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class BookInterviewDto
{
[Required]
public int JobSeekerId { get; set; }
[Required]
public int CompanyId { get; set; }
[Required]
public int JobId { get; set; }
[Required]
[DataType(DataType.DateTime)]
public DateTime Date { get; set; }
[Required]
public string Address { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class ChangePasswordDto
{
[Required]
[DataType(DataType.EmailAddress)]
public string email { get; set; } = null!;
[Required]
[DataType(DataType.Password)]
public string oldPassword { get; set; } = null!;
[Required]
[DataType(DataType.Password)]
public string newPassword { get; set; } = null!;
[Required]
[DataType(DataType.Password)]
[Compare("newPassword", ErrorMessage = "Password and confirmation password do not match")]
public string confirmedPassword { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class CompanyDto
{
public int Id { get; set; }
[Required]
public string Name { get; set; } = null!;
[Required]
public string Phone { get; set; } = null!;
[Required]
public string Email { get; set; } = null!;
[Required]
public String Image { get; set; } = null!;
[Required]
public string Address { get; set; } = null!;
[Required]
public string Description { get; set; } = null!;
}
}
namespace JobPortalAPI.DTOs
{
public class CvDto
{
public CvDto()
{
skills = new List<SkillDto>();
}
public int Id { get; set; }
public string Gender { get; set; } = null!;
public DateTime Birthdate { get; set; }
public string SpecificationName { get; set; } = null!;
public string Certificate { get; set; } = null!;
public string Stages { get; set; } = null!;
public string PreviousWorks { get; set; } = null!;
public string Languages { get; set; } = null!;
public string Name { get; set; } = null!;
public string Password { get; set; } = null!;
public string Token { get; set; } = null!;
public string Phone { get; set; } = null!;
public string Image { get; set; } = null!;
public string Email { get; set; } = null!;
public string Address { get; set; } = null!;
public List<SkillDto> skills { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class CvSkillDto
{
[Required]
public string Name { get; set; } = null!;
[Required]
public string PracticePeriod { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class InterviewDto
{
[Required]
public int Id { get; set; }
[Required]
public int JobSeekerId { get; set; }
[Required]
public int CompanyId { get; set; }
[Required]
public int JobId { get; set; }
public DateTime Date { get; set; }
public string? JobName { get; set; }
public string Address { get; set; } = null!;
public string Name { get; set; } = null!;
public string Image { get; set; } = null!;
}
}
namespace JobPortalAPI.DTOs
{
public class JobDetailsDto
{
public JobDetailsDto()
{
skills = new List<SkillDto>();
}
public int Id { get; set; }
public string CompanyName { get; set; } = null!;
public string TimeType { get; set; } = null!;
public string Name { get; set; } = null!;
public string Description { get; set; } = null!;
public int Sallary { get; set; }
public int CompanyId { get; set; }
public String SpecificationName { get; set; }
public string Status { get; set; } = null!;
public string Phone { get; set; } = null!;
public string Email { get; set; } = null!;
public String Image { get; set; } = null!;
public List<SkillDto> skills { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class JobDto
{
[Required]
public string TimeType { get; set; } = null!;
[Required]
public string Name { get; set; } = null!;
[Required]
public string Description { get; set; } = null!;
[Required]
public int Sallary { get; set; }
[Required]
public int CompanyId { get; set; }
[Required]
public String SpecificationName { get; set; }
[Required]
public string Status { get; set; } = null!;
}
}
namespace JobPortalAPI.DTOs
{
public class JobEntryDto
{
public int JobSeekerId { get; set; }
public int JobId { get; set; }
public DateTime Date { get; set; }
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class JobRequestDto
{
[Required]
public int JobSeekerId { get; set; }
[Required]
public int JobId { get; set; }
}
}
using JobPortalAPI.Models;
namespace JobPortalAPI.DTOs
{
public class JobSeekerDto
{
public int Id { get; set; }
public string Gender { get; set; } = null!;
public DateTime Birthdate { get; set; }
public string SpecificationName { get; set; } = null!;
public string Name { get; set; } = null!;
public string Phone { get; set; } = null!;
public string Email { get; set; } = null!;
public string Image { get; set; } = null!;
public string Address { get; set; } = null!;
}
}
namespace JobPortalAPI.DTOs
{
public class JobSkillDto
{
public string Name { get; set; } = null!;
public string PracticePeriod { get; set; } = null!;
}
}
using Microsoft.Build.Framework;
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class LogInDto
{
[System.ComponentModel.DataAnnotations.Required]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$",
ErrorMessage = "Invalid email format")]
public String email { get; set; }
[System.ComponentModel.DataAnnotations.Required]
[DataType(DataType.Password)]
public String password { get; set; }
}
}
namespace JobPortalAPI.DTOs
{
public class NotificationDto
{
public int id { get; set; }
public int CompanyId { get; set; }
public int JobSeekerId { get; set; }
public int JobId { get; set; }
public String Name { get; set; } = null!;
public String Image { get; set; } = null!;
public bool ToCompany { get; set; }
public string Details { get; set; } = null!;
public DateTime Date { get; set; }
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class PersonCompanyDto
{
[Required]
public string Name { get; set; } = null!;
[Required]
public string Phone { get; set; } = null!;
[Required]
[DataType(DataType.Password)]
public string Password { get; set; } = null!;
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; } = null!;
[Required]
public IFormFile? Image { get; set; } = null!;
[Required]
public string Address { get; set; } = null!;
[Required]
public string Description { get; set; } = null!;
}
}
namespace JobPortalAPI.DTOs
{
public class PersonDto
{
public string Name { get; set; } = null!;
public string Phone { get; set; } = null!;
public string Email { get; set; } = null!;
public IFormFile? Image { get; set; } = null!;
public string Address { get; set; } = null!;
}
}
using JobPortalAPI.Models;
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class PersonJobSeekerDto
{
[Required]
public string Name { get; set; } = null!;
[Required]
[DataType(DataType.Password)]
public string Password { get; set; } = null!;
[Required]
public string Phone { get; set; } = null!;
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; } = null!;
[Required]
public IFormFile? Image { get; set; } = null!;
[Required]
public string Address { get; set; } = null!;
[Required]
public string Gender { get; set; } = null!;
[Required]
public DateTime Birthdate { get; set; }
[Required]
public String SpecificationName { get; set; } = null!;
[Required]
public string Certificate { get; set; } = null!;
[Required]
public string Stages { get; set; } = null!;
[Required]
public string PreviousWorks { get; set; } = null!;
[Required]
public string Languages { get; set; } = null!;
}
}
\ No newline at end of file
using System.ComponentModel.DataAnnotations;
using System.Xml.Linq;
namespace JobPortalAPI.DTOs
{
public class RegisterUserDto
{
//[Required]
//[EmailAddress]
public string Email { get; set; }
//[Required]
//[DataType(DataType.Password)]
public string Password { get; set; }
public String Name { get; set; }
//[DataType(DataType.Password)]
//[Display(Name = "Confirm password")]
//[Compare("Password",
// ErrorMessage = "Password and confirmation password do not match.")]
//public string ConfirmPassword { get; set; }
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class SkillDto
{
[Required]
public int SkillId { get; set; }
[Required]
public string Name { get; set; } = null!;
[Required]
public string PracticePeriod { get; set; } = null!;
}
}
namespace JobPortalAPI.DTOs
{
public class SpecificationDto
{
public string Name { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class UpdateCompanyDto
{
[Required]
public string Name { get; set; } = null!;
[Required]
public string Phone { get; set; } = null!;
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; } = null!;
public IFormFile? Image { get; set; }
[Required]
public string Address { get; set; } = null!;
[Required]
public string Description { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class UpdateInterviewDto
{
[Required]
public int Id { get; set; }
[Required]
public DateTime Date { get; set; }
[Required]
public string Address { get; set; } = null!;
}
}
using System.ComponentModel.DataAnnotations;
namespace JobPortalAPI.DTOs
{
public class UpdateJobseekerDto
{
[Required]
public string Name { get; set; } = null!;
[Required]
public string Phone { get; set; } = null!;
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; } = null!;
public IFormFile? Image { get; set; } = null!;
[Required]
public string Address { get; set; } = null!;
[Required]
public string Gender { get; set; } = null!;
[Required]
public DateTime Birthdate { get; set; }
[Required]
public String SpecificationName { get; set; } = null!;
[Required]
public string Certificate { get; set; } = null!;
[Required]
public string Stages { get; set; } = null!;
[Required]
public string PreviousWorks { get; set; } = null!;
[Required]
public string Languages { get; set; } = null!;
}
}
using AutoMapper;
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.Helpers
{
public class MappingProfile : Profile
{
public MappingProfile()
{
// from , to
CreateMap<Person, PersonDto>();
CreateMap<JobSeeker, JobSeekerDto>()
.ForMember(dest => dest.SpecificationName, opt => opt.MapFrom(src => src.Specification.Name))
.ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.IdNavigation.Address))
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.IdNavigation.Name))
.ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.IdNavigation.Email))
.ForMember(dest => dest.Image, opt => opt.MapFrom(src => src.IdNavigation.Image))
.ForMember(dest => dest.Phone, opt => opt.MapFrom(src => src.IdNavigation.Phone));
CreateMap<PersonJobSeekerDto, Cv>();
CreateMap<Notification, NotificationDto>();
CreateMap<BookInterviewDto, Interview>();
CreateMap<Interview, InterviewDto>();
CreateMap<PersonDto, Person>().ForMember(src => src.Image, opt => opt.Ignore());
CreateMap<PersonJobSeekerDto, Person>()
.ForMember(src => src.Image, opt => opt.Ignore());
CreateMap<PersonCompanyDto, Person>()
.ForMember(src => src.Image, opt => opt.Ignore());
CreateMap<SkillDto, Skill>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name.ToUpper()));
CreateMap<PersonJobSeekerDto, JobSeeker>()
.ForMember(dest => dest.Gender, opt => opt.MapFrom(src => src.Gender))
.ForMember(dest => dest.Birthdate, opt => opt.MapFrom(src => src.Birthdate));
CreateMap<PersonCompanyDto, Company>()
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description));
CreateMap<JobDto, Job>();
}
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface ICompanyRepository : IRepository<Company>
{
public List<Company> GetCompaniesDetails();
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface ICvRepository : IRepository<Cv>
{
public Cv GetAllCvDetails(int id);
public List<Cv> GetAllCvsDetails();
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface ICvSkillRepository : IRepository<Cvskill>
{
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface IInterviewRepository : IRepository<Interview>
{
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface IJobEntryRepository : IRepository<JobEntry>
{
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface IJobRepository : IRepository<Job>
{
public Job GetAllJobDetails(int id);
public List<Job> GetAllJobsDetails();
public List<Job> GetAllJobsDetailsByCompanyId(int id);
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface IJobSeekerRepository : IRepository<JobSeeker>
{
public List<JobSeeker> GetAllDetails();
public IEnumerable<JobSeeker> GetAllWithSpecification();
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface IJobSkillRepository : IRepository<JobSkill>
{
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface INotificationRepository : IRepository<Notification>
{
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface IPersonRepository : IRepository<Person>
{
}
}
using JobPortalAPI.Models;
using System.Linq.Expressions;
namespace JobPortalAPI.IRepository
{
public interface IRepository<T> where T : class
{
// Finding Objects
T Get(int id);
IEnumerable<T> GetAll();
IEnumerable<T> Find(Expression<Func<T, bool>> predicate);
// Adding Objects
void Add(T entity);
void AddRange(IEnumerable<T> entities);
void Update(T entity);
// Removing Objects
void Remove(T entity);
void RemoveRange(IEnumerable<T> entities);
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface ISkillRepository : IRepository<Skill>
{
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.Models;
namespace JobPortalAPI.IRepository
{
public interface ISpecificationRepository : IRepository<Specification>
{
}
}
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="7.0.9" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Core" Version="1.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration" Version="6.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\Images\" />
<Folder Include="wwwroot\Audios\" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\Images\5ade8e8a-c8d0-43b5-ac6b-66116f407d16.jpg" />
<None Include="wwwroot\Images\cdabe486-13ee-44ed-9a6f-b45c3d3e5020.jpg" />
<None Include="wwwroot\Images\decfd062-71e9-4fc4-8627-63917e06df1f.jpg" />
</ItemGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
<WebStackScaffolding_ControllerDialogWidth>650</WebStackScaffolding_ControllerDialogWidth>
</PropertyGroup>
</Project>
\ No newline at end of file
// <auto-generated />
using System;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace JobPortalAPI.Migrations
{
[DbContext(typeof(JobPortalDBContext))]
[Migration("20230825185201_JobPortalDB")]
partial class JobPortalDB
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.0")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
modelBuilder.Entity("JobPortalAPI.Models.Company", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<string>("Description")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.HasKey("Id");
b.ToTable("Company", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Cv", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<string>("Certificate")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("Languages")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("PreviousWorks")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("Stages")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.HasKey("Id");
b.ToTable("CV", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Cvskill", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("Cvid")
.HasColumnType("int")
.HasColumnName("CVId");
b.Property<string>("PracticePeriod")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("SkillId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("Cvid");
b.HasIndex("SkillId");
b.ToTable("CVSkill", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Interview", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("Date")
.HasColumnType("datetime");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<int>("JobSeekerId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("JobId");
b.HasIndex("JobSeekerId");
b.ToTable("Interview", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Job", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<string>("Description")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("Sallary")
.HasColumnType("int");
b.Property<int>("SpecificationId")
.HasColumnType("int");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("TimeType")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("SpecificationId");
b.ToTable("Job", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.JobEntry", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<DateTime>("Date")
.HasColumnType("date");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<int>("JobSeekerId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("JobId");
b.HasIndex("JobSeekerId");
b.ToTable("JobEntry", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.JobSeeker", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<DateTime>("Birthdate")
.HasColumnType("date");
b.Property<string>("Gender")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("SpecificationId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("SpecificationId");
b.ToTable("JobSeeker", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.JobSkill", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<string>("PracticePeriod")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("SkillId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("JobId");
b.HasIndex("SkillId");
b.ToTable("JobSkill", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Notification", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("Date")
.HasColumnType("datetime");
b.Property<string>("Details")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<bool>("IsRead")
.HasColumnType("bit");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<int>("JobSeekerId")
.HasColumnType("int");
b.Property<bool>("ToCompany")
.HasColumnType("bit");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("JobId");
b.HasIndex("JobSeekerId");
b.ToTable("Notification", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Person", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("Image")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("Phone")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.ToTable("Person", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Skill", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.ToTable("Skill", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Specification", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.ToTable("Specification", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Company", b =>
{
b.HasOne("JobPortalAPI.Models.Person", "IdNavigation")
.WithOne("Company")
.HasForeignKey("JobPortalAPI.Models.Company", "Id")
.IsRequired()
.HasConstraintName("FK_Company_Person");
b.Navigation("IdNavigation");
});
modelBuilder.Entity("JobPortalAPI.Models.Cv", b =>
{
b.HasOne("JobPortalAPI.Models.JobSeeker", "IdNavigation")
.WithOne("Cv")
.HasForeignKey("JobPortalAPI.Models.Cv", "Id")
.IsRequired()
.HasConstraintName("FK_CV_JobSeeker");
b.Navigation("IdNavigation");
});
modelBuilder.Entity("JobPortalAPI.Models.Cvskill", b =>
{
b.HasOne("JobPortalAPI.Models.Cv", "Cv")
.WithMany("Cvskills")
.HasForeignKey("Cvid")
.IsRequired()
.HasConstraintName("FK_CVSkill_CV");
b.HasOne("JobPortalAPI.Models.Skill", "Skill")
.WithMany("Cvskills")
.HasForeignKey("SkillId")
.IsRequired()
.HasConstraintName("FK_CVSkill_Skill");
b.Navigation("Cv");
b.Navigation("Skill");
});
modelBuilder.Entity("JobPortalAPI.Models.Interview", b =>
{
b.HasOne("JobPortalAPI.Models.Company", "Company")
.WithMany("Interviews")
.HasForeignKey("CompanyId")
.IsRequired()
.HasConstraintName("FK_Interview_Company");
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("Interviews")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_Interview_Job");
b.HasOne("JobPortalAPI.Models.JobSeeker", "JobSeeker")
.WithMany("Interviews")
.HasForeignKey("JobSeekerId")
.IsRequired()
.HasConstraintName("FK_Interview_JobSeeker");
b.Navigation("Company");
b.Navigation("Job");
b.Navigation("JobSeeker");
});
modelBuilder.Entity("JobPortalAPI.Models.Job", b =>
{
b.HasOne("JobPortalAPI.Models.Company", "Company")
.WithMany("Jobs")
.HasForeignKey("CompanyId")
.IsRequired()
.HasConstraintName("FK_Job_Company");
b.HasOne("JobPortalAPI.Models.Specification", "Specification")
.WithMany("Jobs")
.HasForeignKey("SpecificationId")
.IsRequired()
.HasConstraintName("FK_Job_Specification");
b.Navigation("Company");
b.Navigation("Specification");
});
modelBuilder.Entity("JobPortalAPI.Models.JobEntry", b =>
{
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("JobEntries")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_JobEntry_Job");
b.HasOne("JobPortalAPI.Models.JobSeeker", "JobSeeker")
.WithMany("JobEntries")
.HasForeignKey("JobSeekerId")
.IsRequired()
.HasConstraintName("FK_JobEntry_JobSeeker");
b.Navigation("Job");
b.Navigation("JobSeeker");
});
modelBuilder.Entity("JobPortalAPI.Models.JobSeeker", b =>
{
b.HasOne("JobPortalAPI.Models.Person", "IdNavigation")
.WithOne("JobSeeker")
.HasForeignKey("JobPortalAPI.Models.JobSeeker", "Id")
.IsRequired()
.HasConstraintName("FK_JobSeeker_Person");
b.HasOne("JobPortalAPI.Models.Specification", "Specification")
.WithMany("JobSeekers")
.HasForeignKey("SpecificationId")
.IsRequired()
.HasConstraintName("FK_JobSeeker_Specification");
b.Navigation("IdNavigation");
b.Navigation("Specification");
});
modelBuilder.Entity("JobPortalAPI.Models.JobSkill", b =>
{
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("JobSkills")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_JobSkill_Job");
b.HasOne("JobPortalAPI.Models.Skill", "Skill")
.WithMany("JobSkills")
.HasForeignKey("SkillId")
.IsRequired()
.HasConstraintName("FK_JobSkill_Skill");
b.Navigation("Job");
b.Navigation("Skill");
});
modelBuilder.Entity("JobPortalAPI.Models.Notification", b =>
{
b.HasOne("JobPortalAPI.Models.Company", "Company")
.WithMany("Notifications")
.HasForeignKey("CompanyId")
.IsRequired()
.HasConstraintName("FK_Notification_Company");
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("Notifications")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_Notification_Job");
b.HasOne("JobPortalAPI.Models.JobSeeker", "JobSeeker")
.WithMany("Notifications")
.HasForeignKey("JobSeekerId")
.IsRequired()
.HasConstraintName("FK_Notification_JobSeeker");
b.Navigation("Company");
b.Navigation("Job");
b.Navigation("JobSeeker");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("JobPortalAPI.Models.Company", b =>
{
b.Navigation("Interviews");
b.Navigation("Jobs");
b.Navigation("Notifications");
});
modelBuilder.Entity("JobPortalAPI.Models.Cv", b =>
{
b.Navigation("Cvskills");
});
modelBuilder.Entity("JobPortalAPI.Models.Job", b =>
{
b.Navigation("Interviews");
b.Navigation("JobEntries");
b.Navigation("JobSkills");
b.Navigation("Notifications");
});
modelBuilder.Entity("JobPortalAPI.Models.JobSeeker", b =>
{
b.Navigation("Cv")
.IsRequired();
b.Navigation("Interviews");
b.Navigation("JobEntries");
b.Navigation("Notifications");
});
modelBuilder.Entity("JobPortalAPI.Models.Person", b =>
{
b.Navigation("Company")
.IsRequired();
b.Navigation("JobSeeker")
.IsRequired();
});
modelBuilder.Entity("JobPortalAPI.Models.Skill", b =>
{
b.Navigation("Cvskills");
b.Navigation("JobSkills");
});
modelBuilder.Entity("JobPortalAPI.Models.Specification", b =>
{
b.Navigation("JobSeekers");
b.Navigation("Jobs");
});
#pragma warning restore 612, 618
}
}
}
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace JobPortalAPI.Migrations
{
public partial class JobPortalDB : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "AspNetRoles",
columns: table => new
{
Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AspNetUsers",
columns: table => new
{
Id = table.Column<string>(type: "nvarchar(450)", nullable: false),
UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
NormalizedUserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
Email = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
NormalizedEmail = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
EmailConfirmed = table.Column<bool>(type: "bit", nullable: false),
PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: true),
SecurityStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhoneNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false),
TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false),
LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
LockoutEnabled = table.Column<bool>(type: "bit", nullable: false),
AccessFailedCount = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUsers", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Person",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false),
Phone = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false),
Email = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false),
Image = table.Column<string>(type: "nvarchar(max)", nullable: false),
Address = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Person", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Skill",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Skill", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Specification",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Specification", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AspNetRoleClaims",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
RoleId = table.Column<string>(type: "nvarchar(450)", nullable: false),
ClaimType = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClaimValue = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id);
table.ForeignKey(
name: "FK_AspNetRoleClaims_AspNetRoles_RoleId",
column: x => x.RoleId,
principalTable: "AspNetRoles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserClaims",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
ClaimType = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClaimValue = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserClaims", x => x.Id);
table.ForeignKey(
name: "FK_AspNetUserClaims_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserLogins",
columns: table => new
{
LoginProvider = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
ProviderKey = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
ProviderDisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey });
table.ForeignKey(
name: "FK_AspNetUserLogins_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserRoles",
columns: table => new
{
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
RoleId = table.Column<string>(type: "nvarchar(450)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId });
table.ForeignKey(
name: "FK_AspNetUserRoles_AspNetRoles_RoleId",
column: x => x.RoleId,
principalTable: "AspNetRoles",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_AspNetUserRoles_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AspNetUserTokens",
columns: table => new
{
UserId = table.Column<string>(type: "nvarchar(450)", nullable: false),
LoginProvider = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
Value = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name });
table.ForeignKey(
name: "FK_AspNetUserTokens_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Company",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false),
Description = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Company", x => x.Id);
table.ForeignKey(
name: "FK_Company_Person",
column: x => x.Id,
principalTable: "Person",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "JobSeeker",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false),
Gender = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false),
Birthdate = table.Column<DateTime>(type: "date", nullable: false),
SpecificationId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_JobSeeker", x => x.Id);
table.ForeignKey(
name: "FK_JobSeeker_Person",
column: x => x.Id,
principalTable: "Person",
principalColumn: "Id");
table.ForeignKey(
name: "FK_JobSeeker_Specification",
column: x => x.SpecificationId,
principalTable: "Specification",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "Job",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
TimeType = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false),
Name = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false),
Description = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false),
Sallary = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
SpecificationId = table.Column<int>(type: "int", nullable: false),
Status = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Job", x => x.Id);
table.ForeignKey(
name: "FK_Job_Company",
column: x => x.CompanyId,
principalTable: "Company",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Job_Specification",
column: x => x.SpecificationId,
principalTable: "Specification",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "CV",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false),
Certificate = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false),
Stages = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false),
PreviousWorks = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false),
Languages = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_CV", x => x.Id);
table.ForeignKey(
name: "FK_CV_JobSeeker",
column: x => x.Id,
principalTable: "JobSeeker",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "Interview",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobSeekerId = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
JobId = table.Column<int>(type: "int", nullable: false),
Date = table.Column<DateTime>(type: "datetime", nullable: false),
Address = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Interview", x => x.Id);
table.ForeignKey(
name: "FK_Interview_Company",
column: x => x.CompanyId,
principalTable: "Company",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Interview_Job",
column: x => x.JobId,
principalTable: "Job",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Interview_JobSeeker",
column: x => x.JobSeekerId,
principalTable: "JobSeeker",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "JobEntry",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobSeekerId = table.Column<int>(type: "int", nullable: false),
JobId = table.Column<int>(type: "int", nullable: false),
Date = table.Column<DateTime>(type: "date", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_JobEntry", x => x.Id);
table.ForeignKey(
name: "FK_JobEntry_Job",
column: x => x.JobId,
principalTable: "Job",
principalColumn: "Id");
table.ForeignKey(
name: "FK_JobEntry_JobSeeker",
column: x => x.JobSeekerId,
principalTable: "JobSeeker",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "JobSkill",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
SkillId = table.Column<int>(type: "int", nullable: false),
PracticePeriod = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_JobSkill", x => x.Id);
table.ForeignKey(
name: "FK_JobSkill_Job",
column: x => x.JobId,
principalTable: "Job",
principalColumn: "Id");
table.ForeignKey(
name: "FK_JobSkill_Skill",
column: x => x.SkillId,
principalTable: "Skill",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "Notification",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
JobId = table.Column<int>(type: "int", nullable: false),
CompanyId = table.Column<int>(type: "int", nullable: false),
JobSeekerId = table.Column<int>(type: "int", nullable: false),
Details = table.Column<string>(type: "varchar(max)", unicode: false, nullable: false),
IsRead = table.Column<bool>(type: "bit", nullable: false),
ToCompany = table.Column<bool>(type: "bit", nullable: false),
Date = table.Column<DateTime>(type: "datetime", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Notification", x => x.Id);
table.ForeignKey(
name: "FK_Notification_Company",
column: x => x.CompanyId,
principalTable: "Company",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Notification_Job",
column: x => x.JobId,
principalTable: "Job",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Notification_JobSeeker",
column: x => x.JobSeekerId,
principalTable: "JobSeeker",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "CVSkill",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CVId = table.Column<int>(type: "int", nullable: false),
SkillId = table.Column<int>(type: "int", nullable: false),
PracticePeriod = table.Column<string>(type: "varchar(50)", unicode: false, maxLength: 50, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_CVSkill", x => x.Id);
table.ForeignKey(
name: "FK_CVSkill_CV",
column: x => x.CVId,
principalTable: "CV",
principalColumn: "Id");
table.ForeignKey(
name: "FK_CVSkill_Skill",
column: x => x.SkillId,
principalTable: "Skill",
principalColumn: "Id");
});
migrationBuilder.CreateIndex(
name: "IX_AspNetRoleClaims_RoleId",
table: "AspNetRoleClaims",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "RoleNameIndex",
table: "AspNetRoles",
column: "NormalizedName",
unique: true,
filter: "[NormalizedName] IS NOT NULL");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserClaims_UserId",
table: "AspNetUserClaims",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserLogins_UserId",
table: "AspNetUserLogins",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_AspNetUserRoles_RoleId",
table: "AspNetUserRoles",
column: "RoleId");
migrationBuilder.CreateIndex(
name: "EmailIndex",
table: "AspNetUsers",
column: "NormalizedEmail");
migrationBuilder.CreateIndex(
name: "UserNameIndex",
table: "AspNetUsers",
column: "NormalizedUserName",
unique: true,
filter: "[NormalizedUserName] IS NOT NULL");
migrationBuilder.CreateIndex(
name: "IX_CVSkill_CVId",
table: "CVSkill",
column: "CVId");
migrationBuilder.CreateIndex(
name: "IX_CVSkill_SkillId",
table: "CVSkill",
column: "SkillId");
migrationBuilder.CreateIndex(
name: "IX_Interview_CompanyId",
table: "Interview",
column: "CompanyId");
migrationBuilder.CreateIndex(
name: "IX_Interview_JobId",
table: "Interview",
column: "JobId");
migrationBuilder.CreateIndex(
name: "IX_Interview_JobSeekerId",
table: "Interview",
column: "JobSeekerId");
migrationBuilder.CreateIndex(
name: "IX_Job_CompanyId",
table: "Job",
column: "CompanyId");
migrationBuilder.CreateIndex(
name: "IX_Job_SpecificationId",
table: "Job",
column: "SpecificationId");
migrationBuilder.CreateIndex(
name: "IX_JobEntry_JobId",
table: "JobEntry",
column: "JobId");
migrationBuilder.CreateIndex(
name: "IX_JobEntry_JobSeekerId",
table: "JobEntry",
column: "JobSeekerId");
migrationBuilder.CreateIndex(
name: "IX_JobSeeker_SpecificationId",
table: "JobSeeker",
column: "SpecificationId");
migrationBuilder.CreateIndex(
name: "IX_JobSkill_JobId",
table: "JobSkill",
column: "JobId");
migrationBuilder.CreateIndex(
name: "IX_JobSkill_SkillId",
table: "JobSkill",
column: "SkillId");
migrationBuilder.CreateIndex(
name: "IX_Notification_CompanyId",
table: "Notification",
column: "CompanyId");
migrationBuilder.CreateIndex(
name: "IX_Notification_JobId",
table: "Notification",
column: "JobId");
migrationBuilder.CreateIndex(
name: "IX_Notification_JobSeekerId",
table: "Notification",
column: "JobSeekerId");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AspNetRoleClaims");
migrationBuilder.DropTable(
name: "AspNetUserClaims");
migrationBuilder.DropTable(
name: "AspNetUserLogins");
migrationBuilder.DropTable(
name: "AspNetUserRoles");
migrationBuilder.DropTable(
name: "AspNetUserTokens");
migrationBuilder.DropTable(
name: "CVSkill");
migrationBuilder.DropTable(
name: "Interview");
migrationBuilder.DropTable(
name: "JobEntry");
migrationBuilder.DropTable(
name: "JobSkill");
migrationBuilder.DropTable(
name: "Notification");
migrationBuilder.DropTable(
name: "AspNetRoles");
migrationBuilder.DropTable(
name: "AspNetUsers");
migrationBuilder.DropTable(
name: "CV");
migrationBuilder.DropTable(
name: "Skill");
migrationBuilder.DropTable(
name: "Job");
migrationBuilder.DropTable(
name: "JobSeeker");
migrationBuilder.DropTable(
name: "Company");
migrationBuilder.DropTable(
name: "Specification");
migrationBuilder.DropTable(
name: "Person");
}
}
}
// <auto-generated />
using System;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace JobPortalAPI.Migrations
{
[DbContext(typeof(JobPortalDBContext))]
partial class JobPortalDBContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.0")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
modelBuilder.Entity("JobPortalAPI.Models.Company", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<string>("Description")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.HasKey("Id");
b.ToTable("Company", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Cv", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<string>("Certificate")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("Languages")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("PreviousWorks")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("Stages")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.HasKey("Id");
b.ToTable("CV", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Cvskill", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("Cvid")
.HasColumnType("int")
.HasColumnName("CVId");
b.Property<string>("PracticePeriod")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("SkillId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("Cvid");
b.HasIndex("SkillId");
b.ToTable("CVSkill", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Interview", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("Date")
.HasColumnType("datetime");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<int>("JobSeekerId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("JobId");
b.HasIndex("JobSeekerId");
b.ToTable("Interview", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Job", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<string>("Description")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("Sallary")
.HasColumnType("int");
b.Property<int>("SpecificationId")
.HasColumnType("int");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("TimeType")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("SpecificationId");
b.ToTable("Job", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.JobEntry", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<DateTime>("Date")
.HasColumnType("date");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<int>("JobSeekerId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("JobId");
b.HasIndex("JobSeekerId");
b.ToTable("JobEntry", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.JobSeeker", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<DateTime>("Birthdate")
.HasColumnType("date");
b.Property<string>("Gender")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("SpecificationId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("SpecificationId");
b.ToTable("JobSeeker", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.JobSkill", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<string>("PracticePeriod")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<int>("SkillId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("JobId");
b.HasIndex("SkillId");
b.ToTable("JobSkill", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Notification", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("Date")
.HasColumnType("datetime");
b.Property<string>("Details")
.IsRequired()
.IsUnicode(false)
.HasColumnType("varchar(max)");
b.Property<bool>("IsRead")
.HasColumnType("bit");
b.Property<int>("JobId")
.HasColumnType("int");
b.Property<int>("JobSeekerId")
.HasColumnType("int");
b.Property<bool>("ToCompany")
.HasColumnType("bit");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("JobId");
b.HasIndex("JobSeekerId");
b.ToTable("Notification", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Person", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("Image")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.Property<string>("Phone")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.ToTable("Person", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Skill", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.ToTable("Skill", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Specification", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.IsUnicode(false)
.HasColumnType("varchar(50)");
b.HasKey("Id");
b.ToTable("Specification", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex")
.HasFilter("[NormalizedName] IS NOT NULL");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex")
.HasFilter("[NormalizedUserName] IS NOT NULL");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("ClaimType")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimValue")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("nvarchar(450)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("LoginProvider")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Name")
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<string>("Value")
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("JobPortalAPI.Models.Company", b =>
{
b.HasOne("JobPortalAPI.Models.Person", "IdNavigation")
.WithOne("Company")
.HasForeignKey("JobPortalAPI.Models.Company", "Id")
.IsRequired()
.HasConstraintName("FK_Company_Person");
b.Navigation("IdNavigation");
});
modelBuilder.Entity("JobPortalAPI.Models.Cv", b =>
{
b.HasOne("JobPortalAPI.Models.JobSeeker", "IdNavigation")
.WithOne("Cv")
.HasForeignKey("JobPortalAPI.Models.Cv", "Id")
.IsRequired()
.HasConstraintName("FK_CV_JobSeeker");
b.Navigation("IdNavigation");
});
modelBuilder.Entity("JobPortalAPI.Models.Cvskill", b =>
{
b.HasOne("JobPortalAPI.Models.Cv", "Cv")
.WithMany("Cvskills")
.HasForeignKey("Cvid")
.IsRequired()
.HasConstraintName("FK_CVSkill_CV");
b.HasOne("JobPortalAPI.Models.Skill", "Skill")
.WithMany("Cvskills")
.HasForeignKey("SkillId")
.IsRequired()
.HasConstraintName("FK_CVSkill_Skill");
b.Navigation("Cv");
b.Navigation("Skill");
});
modelBuilder.Entity("JobPortalAPI.Models.Interview", b =>
{
b.HasOne("JobPortalAPI.Models.Company", "Company")
.WithMany("Interviews")
.HasForeignKey("CompanyId")
.IsRequired()
.HasConstraintName("FK_Interview_Company");
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("Interviews")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_Interview_Job");
b.HasOne("JobPortalAPI.Models.JobSeeker", "JobSeeker")
.WithMany("Interviews")
.HasForeignKey("JobSeekerId")
.IsRequired()
.HasConstraintName("FK_Interview_JobSeeker");
b.Navigation("Company");
b.Navigation("Job");
b.Navigation("JobSeeker");
});
modelBuilder.Entity("JobPortalAPI.Models.Job", b =>
{
b.HasOne("JobPortalAPI.Models.Company", "Company")
.WithMany("Jobs")
.HasForeignKey("CompanyId")
.IsRequired()
.HasConstraintName("FK_Job_Company");
b.HasOne("JobPortalAPI.Models.Specification", "Specification")
.WithMany("Jobs")
.HasForeignKey("SpecificationId")
.IsRequired()
.HasConstraintName("FK_Job_Specification");
b.Navigation("Company");
b.Navigation("Specification");
});
modelBuilder.Entity("JobPortalAPI.Models.JobEntry", b =>
{
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("JobEntries")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_JobEntry_Job");
b.HasOne("JobPortalAPI.Models.JobSeeker", "JobSeeker")
.WithMany("JobEntries")
.HasForeignKey("JobSeekerId")
.IsRequired()
.HasConstraintName("FK_JobEntry_JobSeeker");
b.Navigation("Job");
b.Navigation("JobSeeker");
});
modelBuilder.Entity("JobPortalAPI.Models.JobSeeker", b =>
{
b.HasOne("JobPortalAPI.Models.Person", "IdNavigation")
.WithOne("JobSeeker")
.HasForeignKey("JobPortalAPI.Models.JobSeeker", "Id")
.IsRequired()
.HasConstraintName("FK_JobSeeker_Person");
b.HasOne("JobPortalAPI.Models.Specification", "Specification")
.WithMany("JobSeekers")
.HasForeignKey("SpecificationId")
.IsRequired()
.HasConstraintName("FK_JobSeeker_Specification");
b.Navigation("IdNavigation");
b.Navigation("Specification");
});
modelBuilder.Entity("JobPortalAPI.Models.JobSkill", b =>
{
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("JobSkills")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_JobSkill_Job");
b.HasOne("JobPortalAPI.Models.Skill", "Skill")
.WithMany("JobSkills")
.HasForeignKey("SkillId")
.IsRequired()
.HasConstraintName("FK_JobSkill_Skill");
b.Navigation("Job");
b.Navigation("Skill");
});
modelBuilder.Entity("JobPortalAPI.Models.Notification", b =>
{
b.HasOne("JobPortalAPI.Models.Company", "Company")
.WithMany("Notifications")
.HasForeignKey("CompanyId")
.IsRequired()
.HasConstraintName("FK_Notification_Company");
b.HasOne("JobPortalAPI.Models.Job", "Job")
.WithMany("Notifications")
.HasForeignKey("JobId")
.IsRequired()
.HasConstraintName("FK_Notification_Job");
b.HasOne("JobPortalAPI.Models.JobSeeker", "JobSeeker")
.WithMany("Notifications")
.HasForeignKey("JobSeekerId")
.IsRequired()
.HasConstraintName("FK_Notification_JobSeeker");
b.Navigation("Company");
b.Navigation("Job");
b.Navigation("JobSeeker");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("JobPortalAPI.Models.Company", b =>
{
b.Navigation("Interviews");
b.Navigation("Jobs");
b.Navigation("Notifications");
});
modelBuilder.Entity("JobPortalAPI.Models.Cv", b =>
{
b.Navigation("Cvskills");
});
modelBuilder.Entity("JobPortalAPI.Models.Job", b =>
{
b.Navigation("Interviews");
b.Navigation("JobEntries");
b.Navigation("JobSkills");
b.Navigation("Notifications");
});
modelBuilder.Entity("JobPortalAPI.Models.JobSeeker", b =>
{
b.Navigation("Cv")
.IsRequired();
b.Navigation("Interviews");
b.Navigation("JobEntries");
b.Navigation("Notifications");
});
modelBuilder.Entity("JobPortalAPI.Models.Person", b =>
{
b.Navigation("Company")
.IsRequired();
b.Navigation("JobSeeker")
.IsRequired();
});
modelBuilder.Entity("JobPortalAPI.Models.Skill", b =>
{
b.Navigation("Cvskills");
b.Navigation("JobSkills");
});
modelBuilder.Entity("JobPortalAPI.Models.Specification", b =>
{
b.Navigation("JobSeekers");
b.Navigation("Jobs");
});
#pragma warning restore 612, 618
}
}
}
namespace JobPortalAPI.Models
{
public class AuthResult
{
public int Id { get; set; }
public String Token { get; set; }
public bool result { get; set; }
public bool isCompany { get; set; }
public List<String> Errors { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Company
{
public Company()
{
Interviews = new HashSet<Interview>();
Jobs = new HashSet<Job>();
Notifications = new HashSet<Notification>();
}
public int Id { get; set; }
public string Description { get; set; } = null!;
public virtual Person IdNavigation { get; set; } = null!;
public virtual ICollection<Interview> Interviews { get; set; }
public virtual ICollection<Job> Jobs { get; set; }
public virtual ICollection<Notification> Notifications { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Cv
{
public Cv()
{
Cvskills = new HashSet<Cvskill>();
}
public int Id { get; set; }
public string Certificate { get; set; } = null!;
public string Stages { get; set; } = null!;
public string PreviousWorks { get; set; } = null!;
public string Languages { get; set; } = null!;
public virtual JobSeeker IdNavigation { get; set; } = null!;
public virtual ICollection<Cvskill> Cvskills { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Cvskill
{
public int Id { get; set; }
public int Cvid { get; set; }
public int SkillId { get; set; }
public string PracticePeriod { get; set; } = null!;
public virtual Cv Cv { get; set; } = null!;
public virtual Skill Skill { get; set; } = null!;
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Interview
{
public int Id { get; set; }
public int JobSeekerId { get; set; }
public int CompanyId { get; set; }
public int JobId { get; set; }
public DateTime Date { get; set; }
public string Address { get; set; } = null!;
public virtual Company Company { get; set; } = null!;
public virtual Job Job { get; set; } = null!;
public virtual JobSeeker JobSeeker { get; set; } = null!;
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Job
{
public Job()
{
JobEntries = new HashSet<JobEntry>();
JobSkills = new HashSet<JobSkill>();
}
public int Id { get; set; }
public string TimeType { get; set; } = null!;
public string Name { get; set; } = null!;
public string Description { get; set; } = null!;
public int Sallary { get; set; }
public int CompanyId { get; set; }
public int SpecificationId { get; set; }
public string Status { get; set; } = null!;
public virtual Company Company { get; set; } = null!;
public virtual Specification Specification { get; set; } = null!;
public virtual ICollection<JobEntry> JobEntries { get; set; }
public virtual ICollection<JobSkill> JobSkills { get; set; }
public virtual ICollection<Notification> Notifications { get; set; }
public virtual ICollection<Interview> Interviews { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class JobEntry
{
public int Id { get; set; }
public int JobSeekerId { get; set; }
public int JobId { get; set; }
public DateTime Date { get; set; }
public virtual Job Job { get; set; } = null!;
public virtual JobSeeker JobSeeker { get; set; } = null!;
}
}
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
namespace JobPortalAPI.Models
{
public partial class JobPortalDBContext : IdentityDbContext
{
public JobPortalDBContext()
{
}
public JobPortalDBContext(DbContextOptions<JobPortalDBContext> options)
: base(options)
{
}
public virtual DbSet<Company> Companies { get; set; } = null!;
public virtual DbSet<Cv> Cvs { get; set; } = null!;
public virtual DbSet<Cvskill> Cvskills { get; set; } = null!;
public virtual DbSet<Interview> Interviews { get; set; } = null!;
public virtual DbSet<Job> Jobs { get; set; } = null!;
public virtual DbSet<JobEntry> JobEntries { get; set; } = null!;
public virtual DbSet<JobSeeker> JobSeekers { get; set; } = null!;
public virtual DbSet<JobSkill> JobSkills { get; set; } = null!;
public virtual DbSet<Notification> Notifications { get; set; } = null!;
public virtual DbSet<Person> People { get; set; } = null!;
public virtual DbSet<Skill> Skills { get; set; } = null!;
public virtual DbSet<Specification> Specifications { get; set; } = null!;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
optionsBuilder.UseSqlServer("Server=DESKTOP-LO543MC;Database=JobPortalDB;Trusted_Connection=True;");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Company>(entity =>
{
entity.ToTable("Company");
entity.Property(e => e.Id).ValueGeneratedNever();
entity.Property(e => e.Description).IsUnicode(false);
entity.HasOne(d => d.IdNavigation)
.WithOne(p => p.Company)
.HasForeignKey<Company>(d => d.Id)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Company_Person");
});
modelBuilder.Entity<Cv>(entity =>
{
entity.ToTable("CV");
entity.Property(e => e.Id).ValueGeneratedNever();
entity.Property(e => e.Certificate).IsUnicode(false);
entity.Property(e => e.Languages).IsUnicode(false);
entity.Property(e => e.PreviousWorks).IsUnicode(false);
entity.Property(e => e.Stages).IsUnicode(false);
entity.HasOne(d => d.IdNavigation)
.WithOne(p => p.Cv)
.HasForeignKey<Cv>(d => d.Id)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_CV_JobSeeker");
});
modelBuilder.Entity<Cvskill>(entity =>
{
entity.ToTable("CVSkill");
entity.Property(e => e.Cvid).HasColumnName("CVId");
entity.Property(e => e.PracticePeriod)
.HasMaxLength(50)
.IsUnicode(false);
entity.HasOne(d => d.Cv)
.WithMany(p => p.Cvskills)
.HasForeignKey(d => d.Cvid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_CVSkill_CV");
entity.HasOne(d => d.Skill)
.WithMany(p => p.Cvskills)
.HasForeignKey(d => d.SkillId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_CVSkill_Skill");
});
modelBuilder.Entity<Interview>(entity =>
{
entity.ToTable("Interview");
entity.Property(e => e.Address)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.Date).HasColumnType("datetime");
entity.HasOne(d => d.Company)
.WithMany(p => p.Interviews)
.HasForeignKey(d => d.CompanyId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Interview_Company");
entity.HasOne(d => d.JobSeeker)
.WithMany(p => p.Interviews)
.HasForeignKey(d => d.JobSeekerId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Interview_JobSeeker");
entity.HasOne(d => d.Job)
.WithMany(p => p.Interviews)
.HasForeignKey(d => d.JobId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Interview_Job");
});
modelBuilder.Entity<Job>(entity =>
{
entity.ToTable("Job");
entity.Property(e => e.Description).IsUnicode(false);
entity.Property(e => e.Name)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.Status)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.TimeType)
.HasMaxLength(50)
.IsUnicode(false);
entity.HasOne(d => d.Company)
.WithMany(p => p.Jobs)
.HasForeignKey(d => d.CompanyId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Job_Company");
entity.HasOne(d => d.Specification)
.WithMany(p => p.Jobs)
.HasForeignKey(d => d.SpecificationId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Job_Specification");
});
modelBuilder.Entity<JobEntry>(entity =>
{
entity.ToTable("JobEntry");
entity.Property(e => e.Date).HasColumnType("date");
entity.HasOne(d => d.Job)
.WithMany(p => p.JobEntries)
.HasForeignKey(d => d.JobId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_JobEntry_Job");
entity.HasOne(d => d.JobSeeker)
.WithMany(p => p.JobEntries)
.HasForeignKey(d => d.JobSeekerId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_JobEntry_JobSeeker");
});
modelBuilder.Entity<JobSeeker>(entity =>
{
entity.ToTable("JobSeeker");
entity.Property(e => e.Id).ValueGeneratedNever();
entity.Property(e => e.Birthdate).HasColumnType("date");
entity.Property(e => e.Gender)
.HasMaxLength(50)
.IsUnicode(false);
entity.HasOne(d => d.IdNavigation)
.WithOne(p => p.JobSeeker)
.HasForeignKey<JobSeeker>(d => d.Id)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_JobSeeker_Person");
entity.HasOne(d => d.Specification)
.WithMany(p => p.JobSeekers)
.HasForeignKey(d => d.SpecificationId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_JobSeeker_Specification");
});
modelBuilder.Entity<JobSkill>(entity =>
{
entity.ToTable("JobSkill");
entity.Property(e => e.PracticePeriod)
.HasMaxLength(50)
.IsUnicode(false);
entity.HasOne(d => d.Job)
.WithMany(p => p.JobSkills)
.HasForeignKey(d => d.JobId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_JobSkill_Job");
entity.HasOne(d => d.Skill)
.WithMany(p => p.JobSkills)
.HasForeignKey(d => d.SkillId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_JobSkill_Skill");
});
modelBuilder.Entity<Notification>(entity =>
{
entity.ToTable("Notification");
entity.Property(e => e.Date).HasColumnType("datetime");
entity.Property(e => e.Details).IsUnicode(false);
entity.HasOne(d => d.Company)
.WithMany(p => p.Notifications)
.HasForeignKey(d => d.CompanyId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Notification_Company");
entity.HasOne(d => d.JobSeeker)
.WithMany(p => p.Notifications)
.HasForeignKey(d => d.JobSeekerId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Notification_JobSeeker");
entity.HasOne(d => d.Job)
.WithMany(p => p.Notifications)
.HasForeignKey(d => d.JobId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Notification_Job");
});
modelBuilder.Entity<Person>(entity =>
{
entity.ToTable("Person");
entity.Property(e => e.Address)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.Email)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.Name)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.Phone)
.HasMaxLength(50)
.IsUnicode(false);
});
modelBuilder.Entity<Skill>(entity =>
{
entity.ToTable("Skill");
entity.Property(e => e.Name)
.HasMaxLength(50)
.IsUnicode(false);
});
modelBuilder.Entity<Specification>(entity =>
{
entity.ToTable("Specification");
entity.Property(e => e.Name)
.HasMaxLength(50)
.IsUnicode(false);
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class JobSeeker
{
public JobSeeker()
{
Interviews = new HashSet<Interview>();
JobEntries = new HashSet<JobEntry>();
Notifications = new HashSet<Notification>();
}
public int Id { get; set; }
public string Gender { get; set; } = null!;
public DateTime Birthdate { get; set; }
public int SpecificationId { get; set; }
public virtual Person IdNavigation { get; set; } = null!;
public virtual Specification Specification { get; set; } = null!;
public virtual Cv Cv { get; set; } = null!;
public virtual ICollection<Interview> Interviews { get; set; }
public virtual ICollection<JobEntry> JobEntries { get; set; }
public virtual ICollection<Notification> Notifications { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class JobSkill
{
public int Id { get; set; }
public int JobId { get; set; }
public int SkillId { get; set; }
public string PracticePeriod { get; set; } = null!;
public virtual Job Job { get; set; } = null!;
public virtual Skill Skill { get; set; } = null!;
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Notification
{
public int Id { get; set; }
public int JobId { get; set; }
public int CompanyId { get; set; }
public int JobSeekerId { get; set; }
public string Details { get; set; } = null!;
public bool IsRead { get; set; }
public bool ToCompany { get; set; }
public DateTime Date { get; set; }
public virtual Company Company { get; set; } = null!;
public virtual Job Job { get; set; } = null!;
public virtual JobSeeker JobSeeker { get; set; } = null!;
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Person
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public string Phone { get; set; } = null!;
public string Email { get; set; } = null!;
public string Image { get; set; } = null!;
public string Address { get; set; } = null!;
public virtual Company Company { get; set; } = null!;
public virtual JobSeeker JobSeeker { get; set; } = null!;
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Skill
{
public Skill()
{
Cvskills = new HashSet<Cvskill>();
JobSkills = new HashSet<JobSkill>();
}
public int Id { get; set; }
public string Name { get; set; } = null!;
public virtual ICollection<Cvskill> Cvskills { get; set; }
public virtual ICollection<JobSkill> JobSkills { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace JobPortalAPI.Models
{
public partial class Specification
{
public Specification()
{
JobSeekers = new HashSet<JobSeeker>();
Jobs = new HashSet<Job>();
}
public int Id { get; set; }
public string Name { get; set; } = null!;
public virtual ICollection<JobSeeker> JobSeekers { get; set; }
public virtual ICollection<Job> Jobs { get; set; }
}
}
using Microsoft.AspNetCore.SignalR;
namespace JobPortalAPI.Notifications
{
public class NotificationHub : Hub
{
public async Task SendNotification(string message)
{
await Clients.All.SendAsync("ReceiveNotification", message);
}
public async Task AssociateUser(string[] args)
{
string userId = args[0];
await Groups.AddToGroupAsync(Context.ConnectionId, userId);
}
public async Task SendNotificationToUser(string userId, string message)
{
// Send the notification to the specified user
await Clients.Group(userId).SendAsync("ReceiveNotification", message);
}
public async Task JoinGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
}
}
}
using JobPortalAPI.Configurations;
using JobPortalAPI.Models;
using JobPortalAPI.Notifications;
using JobPortalAPI.UnitOfWork;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Routing.Patterns;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
var connectionstring = builder.Configuration.GetConnectionString("DefaultConnection");
// Add services to the container.
builder.Services.AddDbContext<JobPortalDBContext>(options =>
options.UseSqlServer(connectionstring)
);
builder.Services.Configure<IdentityOptions>(options =>
{
options.Password.RequiredLength = 8;
options.Password.RequiredUniqueChars = 3;
options.User.AllowedUserNameCharacters = null;
});
builder.Services.Configure<JwtConfig>(builder.Configuration.GetSection("JwtConfig"));
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}
)
.AddJwtBearer(jwt =>
{
var key = Encoding.ASCII.GetBytes(builder.Configuration.GetSection("JwtConfig:Secret").Value);
jwt.SaveToken = true;
jwt.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
RequireExpirationTime = false,
ValidateLifetime = true
};
});
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedEmail=false)
.AddEntityFrameworkStores<JobPortalDBContext>();
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddCors();
builder.Services.AddSignalR();
builder.Services.AddAutoMapper(typeof(Program));
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
builder.Services.AddResponseCompression();
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
var app = builder.Build();
app.UseRouting();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseCors(c => c.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.MapControllers();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<NotificationHub>("/notificationHub");
});
app.UseResponseCompression();
app.UseStaticFiles();
app.Run();
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:37099",
"sslPort": 0
}
},
"profiles": {
"JobPortalAPI": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5158",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace JobPortalAPI.Repository
{
public class CompanyRepository : Repository<Company>, ICompanyRepository
{
public CompanyRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
public List<Company> GetCompaniesDetails()
{
var x = Context.Companies.Include(c => c.IdNavigation).ToList();
return x;
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace JobPortalAPI.Repository
{
public class CvRepository : Repository<Cv>, ICvRepository
{
public CvRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; }
}
public Cv GetAllCvDetails(int id)
{
var x = Context.Cvs.Include(c => c.IdNavigation).Include(c => c.Cvskills).FirstOrDefault(c => c.Id == id);
return x;
}
public List<Cv> GetAllCvsDetails()
{
var x = Context.Cvs.Include(c => c.IdNavigation).Include(c => c.Cvskills).ToList();
return x;
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class CvSkillRepository : Repository<Cvskill>, ICvSkillRepository
{
public CvSkillRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class InterviewRepository : Repository<Interview>, IInterviewRepository
{
public InterviewRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class JobEntryRepository : Repository<JobEntry>, IJobEntryRepository
{
public JobEntryRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace JobPortalAPI.Repository
{
public class JobRepository : Repository<Job>, IJobRepository
{
public JobRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; }
}
public Job GetAllJobDetails(int id)
{
var x = Context.Jobs.Include(j => j.Company).Include(j => j.JobSkills).FirstOrDefault(j => j.Id == id);
return x;
}
public List<Job> GetAllJobsDetails()
{
var x = Context.Jobs.Include(j => j.Company).Include(j => j.JobSkills).ToList();
return x;
}
public List<Job> GetAllJobsDetailsByCompanyId(int id)
{
var x = Context.Jobs.Include(j => j.Company).Include(j => j.JobSkills).Where(j => j.CompanyId == id).ToList();
return x;
}
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace JobPortalAPI.Repository
{
public class JobSeekerRepository : Repository<JobSeeker>, IJobSeekerRepository
{
public JobSeekerRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; }
}
public List<JobSeeker> GetAllDetails()
{
var x = Context.JobSeekers.Include(js => js.IdNavigation).Include(js => js.Specification).ToList();
return x;
}
public IEnumerable<JobSeeker> GetAllWithSpecification()
{
return Context.JobSeekers.Include(j => j.Specification);
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class JobSkillRepository : Repository<JobSkill>, IJobSkillRepository
{
public JobSkillRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class NotificationRepository : Repository<Notification>, INotificationRepository
{
public NotificationRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
namespace JobPortalAPI.Repository
{
public class PersonRepository : Repository<Person>, IPersonRepository
{
public PersonRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using Microsoft.EntityFrameworkCore;
using System.Linq.Expressions;
namespace JobPortalAPI.Repository
{
public class Repository<T> : IRepository<T> where T : class
{
protected readonly JobPortalDBContext Context;
private DbSet<T> _dbSet;
public Repository(JobPortalDBContext context)
{
Context = context;
_dbSet = Context.Set<T>();
}
public T Get(int id)
{
return _dbSet.Find(id);
}
public IEnumerable<T> GetAll()
{
return _dbSet.ToList();
}
public IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
{
return _dbSet.Where(predicate);
}
public void Add(T entity)
{
_dbSet.Add(entity);
Context.SaveChanges();
}
public void AddRange(IEnumerable<T> entities)
{
_dbSet.AddRange(entities);
Context.SaveChanges();
}
public void Update(T entity)
{
_dbSet.Update(entity);
}
public void Remove(T entity)
{
_dbSet.Remove(entity);
}
public void RemoveRange(IEnumerable<T> entities)
{
_dbSet.RemoveRange(entities);
}
}
}
using JobPortalAPI.DTOs;
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class SkillRepository : Repository<Skill>, ISkillRepository
{
public SkillRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
namespace JobPortalAPI.Repository
{
public class SpecificationRepository : Repository<Specification>, ISpecificationRepository
{
public SpecificationRepository(JobPortalDBContext context) : base(context)
{
}
public JobPortalDBContext CurrDbContext
{
get { return Context as JobPortalDBContext; } // Casting the Context of the base Repository to ProjectDBContext
}
}
}
using JobPortalAPI.IRepository;
namespace JobPortalAPI.UnitOfWork
{
public interface IUnitOfWork : IDisposable
{
public ICompanyRepository CompanyRepo { get; }
public ICvRepository CvRepo { get; }
public ICvSkillRepository CvSkillRepo { get; }
public IInterviewRepository InterviewRepo { get; }
public IJobRepository JobRepo { get; }
public IJobEntryRepository JobEntryRepo { get; }
public IJobSeekerRepository JobSeekerRepo { get; }
public IJobSkillRepository JobSkillRepo { get; }
public INotificationRepository NotificationRepo { get; }
public IPersonRepository PersonRepo { get; }
public ISkillRepository SkillRepo { get; }
public ISpecificationRepository SpecificationRepo { get; }
public int SaveChanges();
}
}
using JobPortalAPI.IRepository;
using JobPortalAPI.Models;
using JobPortalAPI.Repository;
namespace JobPortalAPI.UnitOfWork
{
public class UnitOfWork : IUnitOfWork
{
public readonly JobPortalDBContext _context;
public ICompanyRepository CompanyRepo { get; private set; }
public ICvRepository CvRepo { get; private set; }
public ICvSkillRepository CvSkillRepo { get; private set; }
public IInterviewRepository InterviewRepo { get; private set; }
public IJobRepository JobRepo { get; private set; }
public IJobEntryRepository JobEntryRepo { get; private set; }
public IJobSeekerRepository JobSeekerRepo { get; private set; }
public IJobSkillRepository JobSkillRepo { get; private set; }
public INotificationRepository NotificationRepo { get; private set; }
public IPersonRepository PersonRepo { get; private set; }
public ISkillRepository SkillRepo { get; private set;
}
public ISpecificationRepository SpecificationRepo { get; private set; }
public UnitOfWork(JobPortalDBContext context)
{
_context = context;
CompanyRepo = new CompanyRepository(_context);
CvRepo = new CvRepository(_context);
CvSkillRepo = new CvSkillRepository(_context);
InterviewRepo = new InterviewRepository(_context);
JobRepo = new JobRepository(_context);
JobSkillRepo = new JobSkillRepository(_context);
JobEntryRepo = new JobEntryRepository(_context);
JobSeekerRepo = new JobSeekerRepository(_context);
NotificationRepo = new NotificationRepository(_context);
SpecificationRepo = new SpecificationRepository(_context);
SkillRepo = new SkillRepository(_context);
PersonRepo = new PersonRepository(_context);
}
public int SaveChanges()
{
return _context.SaveChanges();
}
public void Dispose()
{
_context.Dispose();
}
}
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
{
"ConnectionStrings": {
"DefaultConnection": "Server=DESKTOP-LO543MC;Database=JobPortalDB;Trusted_Connection=True;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"JwtConfig": {
"Secret": "9il76td4y7sXzZXpFxqtebfnYnjwivszq9dTknm"
}
}
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
// <auto-generated/>
global using global::Microsoft.AspNetCore.Builder;
global using global::Microsoft.AspNetCore.Hosting;
global using global::Microsoft.AspNetCore.Http;
global using global::Microsoft.AspNetCore.Routing;
global using global::Microsoft.Extensions.Configuration;
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Extensions.Hosting;
global using global::Microsoft.Extensions.Logging;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Net.Http.Json;
global using global::System.Threading;
global using global::System.Threading.Tasks;
{
"format": 1,
"restore": {
"A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\JobPortalAPI.csproj": {}
},
"projects": {
"A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\JobPortalAPI.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\JobPortalAPI.csproj",
"projectName": "JobPortalAPI",
"projectPath": "A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\JobPortalAPI.csproj",
"packagesPath": "C:\\Users\\dell\\.nuget\\packages\\",
"outputPath": "A:\\Mobile_Application\\JobPortalAPI\\JobPortalAPI\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\dell\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"AutoMapper.Extensions.Microsoft.DependencyInjection": {
"target": "Package",
"version": "[12.0.1, )"
},
"Microsoft.AspNetCore.Authentication.JwtBearer": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.AspNetCore.Http.Extensions": {
"target": "Package",
"version": "[2.2.0, )"
},
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.AspNetCore.Identity.UI": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.AspNetCore.SignalR": {
"target": "Package",
"version": "[1.1.0, )"
},
"Microsoft.AspNetCore.SignalR.Client": {
"target": "Package",
"version": "[7.0.9, )"
},
"Microsoft.AspNetCore.SignalR.Core": {
"target": "Package",
"version": "[1.1.0, )"
},
"Microsoft.EntityFrameworkCore": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.EntityFrameworkCore.Design": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
"suppressParent": "All",
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.EntityFrameworkCore.SqlServer": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.EntityFrameworkCore.Tools": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
"suppressParent": "All",
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.VisualStudio.Web.CodeGeneration": {
"target": "Package",
"version": "[6.0.0, )"
},
"Microsoft.VisualStudio.Web.CodeGeneration.Design": {
"target": "Package",
"version": "[6.0.0, )"
},
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.3, )"
},
"Swashbuckle.AspNetCore": {
"target": "Package",
"version": "[6.2.3, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.AspNetCore.App": {
"privateAssets": "none"
},
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.203\\RuntimeIdentifierGraph.json"
}
}
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\dell\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.5.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\dell\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\3.0.0\build\Microsoft.Extensions.ApiDescription.Server.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\3.0.0\build\Microsoft.Extensions.ApiDescription.Server.props')" />
<Import Project="$(NuGetPackageRoot)swashbuckle.aspnetcore\6.2.3\build\Swashbuckle.AspNetCore.props" Condition="Exists('$(NuGetPackageRoot)swashbuckle.aspnetcore\6.2.3\build\Swashbuckle.AspNetCore.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore.design\6.0.0\build\net6.0\Microsoft.EntityFrameworkCore.Design.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore.design\6.0.0\build\net6.0\Microsoft.EntityFrameworkCore.Design.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.identity.ui\6.0.0\build\Microsoft.AspNetCore.Identity.UI.props" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.identity.ui\6.0.0\build\Microsoft.AspNetCore.Identity.UI.props')" />
</ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_Extensions_ApiDescription_Server Condition=" '$(PkgMicrosoft_Extensions_ApiDescription_Server)' == '' ">C:\Users\dell\.nuget\packages\microsoft.extensions.apidescription.server\3.0.0</PkgMicrosoft_Extensions_ApiDescription_Server>
<PkgMessagePackAnalyzer Condition=" '$(PkgMessagePackAnalyzer)' == '' ">C:\Users\dell\.nuget\packages\messagepackanalyzer\2.1.152</PkgMessagePackAnalyzer>
<PkgMicrosoft_CodeAnalysis_Analyzers Condition=" '$(PkgMicrosoft_CodeAnalysis_Analyzers)' == '' ">C:\Users\dell\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.2</PkgMicrosoft_CodeAnalysis_Analyzers>
<PkgMicrosoft_CodeAnalysis_AnalyzerUtilities Condition=" '$(PkgMicrosoft_CodeAnalysis_AnalyzerUtilities)' == '' ">C:\Users\dell\.nuget\packages\microsoft.codeanalysis.analyzerutilities\3.3.0</PkgMicrosoft_CodeAnalysis_AnalyzerUtilities>
<PkgMicrosoft_EntityFrameworkCore_Tools Condition=" '$(PkgMicrosoft_EntityFrameworkCore_Tools)' == '' ">C:\Users\dell\.nuget\packages\microsoft.entityframeworkcore.tools\6.0.0</PkgMicrosoft_EntityFrameworkCore_Tools>
</PropertyGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)system.text.json\7.0.3\buildTransitive\net6.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\7.0.3\buildTransitive\net6.0\System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\3.0.0\build\Microsoft.Extensions.ApiDescription.Server.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\3.0.0\build\Microsoft.Extensions.ApiDescription.Server.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\7.0.1\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\7.0.1\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.mvc.razor.runtimecompilation\6.0.0\buildTransitive\net6.0\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.mvc.razor.runtimecompilation\6.0.0\buildTransitive\net6.0\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.identity.ui\6.0.0\buildTransitive\Microsoft.AspNetCore.Identity.UI.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.identity.ui\6.0.0\buildTransitive\Microsoft.AspNetCore.Identity.UI.targets')" />
</ImportGroup>
</Project>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
job_portal_app @ 968babca
Subproject commit 968babca2dd32af94138de102b37a693130a8cd5
File added
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="540" height="313"><desc>title%20Apply%20For%20Job%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0Aparticipant%20Company%0A%0A%0A%0Aentryspacing%201.2%0AJobseeker-%3ESystem%3A%20%D9%90ApplyForJob(job_id%2C%20jobseeker_id)%0A%0AJobseeker%3C--System%3A%20job%20applied%20successfully%0ASystem-%3ECompany%3A%20sendNotification()%0A%0A%0A</desc><defs/><g><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="540" height="313"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="202.45052710797393" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Apply For Job</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 59.71017540432813 95.887643371 L 59.71017540432813 313.145847261" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 325.73301306988805 95.887643371 L 325.73301306988805 313.145847261" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 483.36650747372914 95.887643371 L 483.36650747372914 313.145847261" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 8.167601650000002 51.782594461 L 111.25274915865626 51.782594461 L 111.25274915865626 95.887643371 L 8.167601650000002 95.887643371 L 8.167601650000002 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="25.891297230500008" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 283.5712452847982 51.782594461 L 367.89478085497785 51.782594461 L 367.89478085497785 95.887643371 L 283.5712452847982 95.887643371 L 283.5712452847982 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="301.2949408652982" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 434.2720233190104 51.782594461 L 532.4609916284479 51.782594461 L 532.4609916284479 95.887643371 L 434.2720233190104 95.887643371 L 434.2720233190104 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.9957188995104" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g></g><g><g><g><rect fill="white" stroke="none" x="79.04016597599481" y="133.458610961" width="227.36285652222656" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="81.49044647099481" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">ِApplyForJob(job_id, jobseeker_id)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 59.71017540432813 154.694375251 L 312.2836956862214 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(325.73301306988805,154.694375251) translate(-325.73301306988805,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 312.12034365322137 147.88804054266666 L 325.73301306988805 154.694375251 L 312.12034365322137 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="113.26348598331903" y="184.09774119099998" width="158.91621650757813" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="115.71376647831903" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">job applied successfully</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 325.73301306988805 205.33350548099997 L 73.1594927879948 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(59.71017540432813,205.33350548099997) translate(-59.71017540432813,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 73.3228448209948 198.52717077266664 L 59.71017540432813 205.33350548099997 L 73.3228448209948 212.1398401893333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="345.0630036415547" y="234.73687142099996" width="118.97351326050781" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="347.5132841365547" y="249.43855439099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">sendNotification()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 325.73301306988805 255.97263571099995 L 469.9171900900625 255.97263571099995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(483.36650747372914,255.97263571099995) translate(-483.36650747372914,-255.97263571099995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 469.75383805706247 249.16630100266661 L 483.36650747372914 255.97263571099995 L 469.75383805706247 262.7789704193333 Z"/></g></g></g><g/><g/><g/></g></svg>
\ No newline at end of file
title Apply For Job
participant Jobseeker
participant System
participant Company
entryspacing 1.2
Jobseeker->System: ِApplyForJob(job_id, jobseeker_id)
Jobseeker<--System: job applied successfully
System->Company: sendNotification()
title Book Interview
participant Company
participant System
participant Jobseeker
entryspacing 1.2
Company->System:AddInterview()
Company<--System: interview form
Company->System:BookInterview(job_id, jobseeker_id, company_id, address, date)
alt empty form
loop empty form
Company<--System: enter valid form
end
else valid form
Jobseeker<--System: sendNotification()
Company<--System: the interview booked successfully
end
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="780" height="670"><desc>title%20Book%20Interview%0A%0Aparticipant%20Company%0Aparticipant%20System%0Aparticipant%20Jobseeker%0A%0A%0Aentryspacing%201.2%0ACompany-%3ESystem%3AAddInterview()%0ACompany%3C--System%3A%20interview%20form%0A%0ACompany-%3ESystem%3ABookInterview(job_id%2C%20jobseeker_id%2C%20company_id%2C%20address%2C%20date)%0Aalt%20empty%20form%0Aloop%20empty%20form%0A%0ACompany%3C--System%3A%20enter%20valid%20form%0A%0Aend%0Aelse%20valid%20form%0A%0AJobseeker%3C--System%3A%20sendNotification()%0ACompany%3C--System%3A%20the%20interview%20booked%20successfully%0Aend%0A%0A%0A</desc><defs/><g><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="780" height="670"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="318.3352601103841" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Book Interview</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 95.887643371 L 89.84361815 670.8867995309998" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 549.8176734669271 95.887643371 L 549.8176734669271 670.8867995309998" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 707.4511678707682 95.887643371 L 707.4511678707682 670.8867995309998" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 40.74913399528124 51.782594461 L 138.93810230471877 51.782594461 L 138.93810230471877 95.887643371 L 40.74913399528124 95.887643371 L 40.74913399528124 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="58.47282957578125" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 507.6559056818372 51.782594461 L 591.979441252017 51.782594461 L 591.979441252017 95.887643371 L 507.6559056818372 95.887643371 L 507.6559056818372 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="525.3796012623372" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 655.9085941164401 51.782594461 L 758.9937416250964 51.782594461 L 758.9937416250964 95.887643371 L 655.9085941164401 95.887643371 L 655.9085941164401 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="673.6322896969401" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g></g><g><g><g><rect fill="white" stroke="none" x="270.12555879490884" y="133.458610961" width="99.41017402710938" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="272.57583928990886" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">AddInterview()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 154.694375251 L 536.3683560832604 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(549.8176734669271,154.694375251) translate(-549.8176734669271,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 536.2050040502604 147.88804054266666 L 549.8176734669271 154.694375251 L 536.2050040502604 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="271.76120180027993" y="184.09774119099998" width="96.13888801636719" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="274.21148229527995" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">interview form</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 549.8176734669271 205.33350548099997 L 103.29293553366666 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,205.33350548099997) translate(-89.84361815,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 198.52717077266664 L 89.84361815 205.33350548099997 L 103.45628756666666 212.1398401893333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="109.17360872166667" y="234.73687142099996" width="421.3140741735937" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="111.62388921666667" y="249.43855439099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">BookInterview(job_id, jobseeker_id, company_id, address, date)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 255.97263571099995 L 536.3683560832604 255.97263571099995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(549.8176734669271,255.97263571099995) translate(-549.8176734669271,-255.97263571099995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 536.2050040502604 249.16630100266661 L 549.8176734669271 255.97263571099995 L 536.2050040502604 262.7789704193333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="266.8649997128776" y="383.38722145099985" width="105.93129219117188" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="269.3152802078776" y="398.0889044209998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">enter valid form</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 549.8176734669271 404.62298574099987 L 103.29293553366666 404.62298574099987" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,404.62298574099987) translate(-89.84361815,-404.62298574099987)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 397.8166510326665 L 89.84361815 404.62298574099987 L 103.45628756666666 411.4293204493332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="569.1476640385938" y="512.4353275209999" width="118.97351326050781" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="571.5979445335938" y="527.1370104909998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">sendNotification()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 549.8176734669271 533.6710918109999 L 694.0018504871016 533.6710918109999" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(707.4511678707682,533.6710918109999) translate(-707.4511678707682,-533.6710918109999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 693.8384984541016 526.8647571026665 L 707.4511678707682 533.6710918109999 L 693.8384984541016 540.4774265193332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="208.59731477635418" y="563.0744577509998" width="222.46666206421875" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="211.04759527135417" y="577.7761407209998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">the interview booked successfully</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 549.8176734669271 584.3102220409999 L 103.29293553366666 584.3102220409999" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,584.3102220409999) translate(-89.84361815,-584.3102220409999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 577.5038873326665 L 89.84361815 584.3102220409999 L 103.45628756666666 591.1165567493332 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 764.6243794207683 285.3760016509999 L 764.6243794207683 613.7135879809998 L 16.335203300000003 613.7135879809998 L 16.335203300000003 285.3760016509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 16.335203300000003 304.9782456109999 L 62.694406897070316 304.9782456109999 L 72.49552887707031 295.1771236309999 L 72.49552887707031 285.3760016509999 L 16.335203300000003 285.3760016509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040660000001" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="286.68281791499993" width="76.586352005625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[empty form]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 463.4297176209999 L 764.6243794207683 463.4297176209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="464.7365338849999" width="68.76825203003906" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="476.4978802609999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form]</text></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 606.9908850169271 334.3816115509999 L 606.9908850169271 434.0263516809999 L 32.6704066 434.0263516809999 L 32.6704066 334.3816115509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 32.6704066 353.9838555109999 L 90.09520773125 353.9838555109999 L 99.89632971125 344.1827335309999 L 99.89632971125 334.3816115509999 L 32.6704066 334.3816115509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="335.6884278149999" width="76.586352005625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[empty form]</text></g><g/></g><g/><g/><g/></g></svg>
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="638" height="1154"><desc>title%20Company%20Login%0A%0Aparticipant%20Company%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0ACompany-%3ESystem%3AstartLogin()%0ACompany%3C--System%3Alogin%20form%0ACompany-%3ESystem%3AfillLoginForm(email%2C%20password)%0A%0Aalt%20empty%20form%0Aloop%20send%20empty%20form%0ACompany%3C--System%3Ainvalid%20form%20%0Aend%20%0Aelse%20valid%20form%2C%20but%20email%20does%20not%20exit%0Aloop%20email%20does%20not%20exist%0A%0ACompany%3C--System%3A%20email%20does%20not%20exist%2C%20try%20with%20diffrent%20email%20or%20go%20to%20register%20page%0Aend%0A%0Aelse%20valid%20form%2C%20but%20email%20not%20for%20company%0Aloop%20email%20not%20for%20company%0A%0ACompany%3C--System%3A%20enter%20a%20diffrent%20email%2C%20or%20login%20as%20jobseeker%0Aend%0Aelse%20valid%20form%2C%20but%20email%20and%20password%20do%20not%20match%0Aloop%20email%20and%20password%20do%20not%20match%0A%0ACompany%3C--System%3A%20enter%20valid%20email%20and%20password%0Aend%0Aelse%20success%0ACompany%3C--System%3A%20login%20done%20successfully.%0Aend</desc><defs/><g><g/><g/><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="638" height="1154"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="242.22398687291667" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company Login</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 95.887643371 L 89.84361815 1154.4088172109994" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 95.887643371 L 548.7010352833333 1154.4088172109994" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 40.74913399528124 51.782594461 L 138.93810230471877 51.782594461 L 138.93810230471877 95.887643371 L 40.74913399528124 95.887643371 L 40.74913399528124 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="58.47282957578125" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 506.5392674982435 51.782594461 L 590.8628030684232 51.782594461 L 590.8628030684232 95.887643371 L 506.5392674982435 95.887643371 L 506.5392674982435 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="524.2629630787435" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="279.7497729672721" y="133.458610961" width="79.04510749878906" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="282.20005346227214" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">startLogin()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 154.694375251 L 535.2517178996667 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(548.7010352833333,154.694375251) translate(-548.7010352833333,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 535.0883658666667 147.88804054266666 L 548.7010352833333 154.694375251 L 535.0883658666667 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="284.6388110532096" y="184.09774119099998" width="69.26703132691406" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="287.08909154820964" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">login form</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 205.33350548099997 L 103.29293553366666 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,205.33350548099997) translate(-89.84361815,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 198.52717077266664 L 89.84361815 205.33350548099997 L 103.45628756666666 212.1398401893333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="217.02252382176434" y="234.73687142099996" width="204.4996057898047" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="219.47280431676432" y="249.43855439099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">fillLoginForm(email, password)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 255.97263571099995 L 535.2517178996667 255.97263571099995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(548.7010352833333,255.97263571099995) translate(-548.7010352833333,-255.97263571099995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 535.0883658666667 249.16630100266661 L 548.7010352833333 255.97263571099995 L 535.0883658666667 262.7789704193333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="277.308824480944" y="383.38722145099985" width="83.92700447144531" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="279.759104975944" y="398.0889044209998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">invalid form </text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 404.62298574099987 L 103.29293553366666 404.62298574099987" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,404.62298574099987) translate(-89.84361815,-404.62298574099987)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 397.8166510326665 L 89.84361815 404.62298574099987 L 103.45628756666666 411.4293204493332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="109.17360872166667" y="561.4409374209998" width="420.19743599" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="111.62388921666667" y="576.1426203909998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">email does not exist, try with diffrent email or go to register page</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 582.6767017109999 L 103.29293553366666 582.6767017109999" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,582.6767017109999) translate(-89.84361815,-582.6767017109999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 575.8703670026665 L 89.84361815 582.6767017109999 L 103.45628756666666 589.4830364193332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="178.42554658787762" y="739.4946533909997" width="281.6935602575781" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="180.8758270828776" y="754.1963363609997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">enter a diffrent email, or login as jobseeker</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 760.7304176809997 L 103.29293553366666 760.7304176809997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,760.7304176809997) translate(-89.84361815,-760.7304176809997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 753.9240829726664 L 89.84361815 760.7304176809997 L 103.45628756666666 767.5367523893331 Z"/></g></g><g><g><rect fill="white" stroke="none" x="215.77699464695965" y="917.5483693609996" width="206.99066413941406" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="218.22727514195964" y="932.2500523309996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">enter valid email and password</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 938.7841336509996 L 103.29293553366666 938.7841336509996" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,938.7841336509996) translate(-89.84361815,-938.7841336509996)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 931.9777989426663 L 89.84361815 938.7841336509996 L 103.45628756666666 945.5904683593329 Z"/></g></g><g><g><rect fill="white" stroke="none" x="239.95022004979168" y="1046.5964754309996" width="158.64421333375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="242.40050054479167" y="1061.2981584009997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">login done successfully.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 1067.8322397209995 L 103.29293553366666 1067.8322397209995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,1067.8322397209995) translate(-89.84361815,-1067.8322397209995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 1061.0259050126663 L 89.84361815 1067.8322397209995 L 103.45628756666666 1074.6385744293327 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 622.2094501333333 285.3760016509999 L 622.2094501333333 1097.2356056609995 L 16.335203300000003 1097.2356056609995 L 16.335203300000003 285.3760016509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 16.335203300000003 304.9782456109999 L 62.694406897070316 304.9782456109999 L 72.49552887707031 295.1771236309999 L 72.49552887707031 285.3760016509999 L 16.335203300000003 285.3760016509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040660000001" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="286.68281791499993" width="76.586352005625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[empty form]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 463.4297176209999 L 622.2094501333333 463.4297176209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="464.7365338849999" width="202.3800989538672" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="476.4978802609999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email does not exit]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 641.4834335909998 L 622.2094501333333 641.4834335909998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="642.7902498549997" width="221.92244209351563" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="654.5515962309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email not for company]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 819.5371495609996 L 622.2094501333333 819.5371495609996" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="820.8439658249996" width="285.7958856970312" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="832.6053122009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email and password do not match]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 997.5908655309995 L 622.2094501333333 997.5908655309995" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="998.8976817949995" width="59.02005256714844" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="1010.6590281709995" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[success]</text></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 605.8742468333334 334.3816115509999 L 605.8742468333334 434.0263516809999 L 32.6704066 434.0263516809999 L 32.6704066 334.3816115509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 32.6704066 353.9838555109999 L 90.09520773125 353.9838555109999 L 99.89632971125 344.1827335309999 L 99.89632971125 334.3816115509999 L 32.6704066 334.3816115509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="335.6884278149999" width="107.22293342652344" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[send empty form]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 605.8742468333334 512.4353275209999 L 605.8742468333334 612.0800676509998 L 32.6704066 612.0800676509998 L 32.6704066 512.4353275209999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 32.6704066 532.0375714809999 L 90.09520773125 532.0375714809999 L 99.89632971125 522.2364495009998 L 99.89632971125 512.4353275209999 L 32.6704066 512.4353275209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="513.7421437849998" width="124.83508552613281" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[email does not exist]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 605.8742468333334 690.4890434909997 L 605.8742468333334 790.1337836209997 L 32.6704066 790.1337836209997 L 32.6704066 690.4890434909997 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 32.6704066 710.0912874509997 L 90.09520773125 710.0912874509997 L 99.89632971125 700.2901654709997 L 99.89632971125 690.4890434909997 L 32.6704066 690.4890434909997" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="691.7958597549997" width="137.85376228394531" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[email not for company]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 868.5427594609996 L 605.8742468333334 868.5427594609996 L 605.8742468333334 968.1874995909996 L 32.6704066 968.1874995909996 L 32.6704066 868.5427594609996 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 868.5427594609996 L 32.6704066 888.1450034209996 L 90.09520773125 888.1450034209996 L 99.89632971125 878.3438814409996 L 99.89632971125 868.5427594609996 L 32.6704066 868.5427594609996" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="881.6109221009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="869.8495757249996" width="201.72722114625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="881.6109221009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[email and password do not match]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
title Company Login
participant Company
participant System
entryspacing 1.2
Company->System:startLogin()
Company<--System:login form
Company->System:fillLoginForm(email, password)
alt empty form
loop send empty form
Company<--System:invalid form
end
else valid form, but email does not exit
loop email does not exist
Company<--System: email does not exist, try with diffrent email or go to register page
end
else valid form, but email not for company
loop email not for company
Company<--System: enter a diffrent email, or login as jobseeker
end
else valid form, but email and password do not match
loop email and password do not match
Company<--System: enter valid email and password
end
else success
Company<--System: login done successfully.
end
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="502" height="1026"><desc>title%20Company%20Register%0A%0Aparticipant%20Company%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0ACompany-%3ESystem%3AstartRegister()%0ACompany%3C--System%3Aregister%20form%0ACompany-%3ESystem%3AfillRegisterForm(email%2C%20password%2Cname%2C....)%0A%0Aalt%20empty%20form%0Aloop%20send%20empty%20form%0ACompany%3C--System%3Ainvalid%20form%20%0Aend%20%0Aelse%20valid%20form%2C%20but%20email%20already%20exit%0Aloop%20already%20existed%20email%0A%0ACompany%3C--System%3A%20email%20already%20exist%2C%20try%20with%20diffrent%20email%0Aend%0A%0Aelse%20valid%20form%2C%20but%20password%20is%20weak%0Aloop%20password%20not%20strong%0A%0ACompany%3C--System%3A%20invalid%20password%2C%20enter%20strong%20password%0Aend%0Aelse%20success%0ACompany%3C--System%3A%20registration%20done%20successfully.%0ACompany%3C--System%3A%20loginForm()%0A%0Aend</desc><defs/><g><g/><g/><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="502" height="1026"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="160.24376226354167" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company Register</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 95.887643371 L 89.84361815 1026.9942314709995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 95.887643371 L 412.83140637708334 1026.9942314709995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 40.74913399528124 51.782594461 L 138.93810230471877 51.782594461 L 138.93810230471877 95.887643371 L 40.74913399528124 95.887643371 L 40.74913399528124 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="58.47282957578125" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 370.6696385919935 51.782594461 L 454.9931741621732 51.782594461 L 454.9931741621732 95.887643371 L 370.6696385919935 95.887643371 L 370.6696385919935 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="388.3933341724935" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="202.4556216611198" y="133.458610961" width="97.76378120484375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="204.9059021561198" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">startRegister()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 154.694375251 L 399.3820889934167 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(412.83140637708334,154.694375251) translate(-412.83140637708334,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 399.21873696041666 147.88804054266666 L 412.83140637708334 154.694375251 L 399.21873696041666 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="207.7491015805534" y="184.09774119099998" width="87.17682136597656" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="210.1993820755534" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">register form</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 205.33350548099997 L 103.29293553366666 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,205.33350548099997) translate(-89.84361815,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 198.52717077266664 L 89.84361815 205.33350548099997 L 103.45628756666666 212.1398401893333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="109.17360872166667" y="234.73687142099996" width="284.32780708375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="111.62388921666667" y="249.43855439099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">fillRegisterForm(email, password,name,....)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 255.97263571099995 L 399.3820889934167 255.97263571099995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(412.83140637708334,255.97263571099995) translate(-412.83140637708334,-255.97263571099995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 399.21873696041666 249.16630100266661 L 412.83140637708334 255.97263571099995 L 399.21873696041666 262.7789704193333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="209.37401002781903" y="383.38722145099985" width="83.92700447144531" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="211.824290522819" y="398.0889044209998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">invalid form </text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 404.62298574099987 L 103.29293553366666 404.62298574099987" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,404.62298574099987) translate(-89.84361815,-404.62298574099987)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 397.8166510326665 L 89.84361815 404.62298574099987 L 103.45628756666666 411.4293204493332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="117.03331941502604" y="561.4409374209998" width="268.6083856970312" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="119.48359991002604" y="576.1426203909998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">email already exist, try with diffrent email</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 582.6767017109999 L 103.29293553366666 582.6767017109999" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,582.6767017109999) translate(-89.84361815,-582.6767017109999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 575.8703670026665 L 89.84361815 582.6767017109999 L 103.45628756666666 589.4830364193332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="118.10347932713542" y="739.4946533909997" width="266.4680658728125" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="120.55375982213542" y="754.1963363609997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">invalid password, enter strong password</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 760.7304176809997 L 103.29293553366666 760.7304176809997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,760.7304176809997) translate(-89.84361815,-760.7304176809997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 753.9240829726664 L 89.84361815 760.7304176809997 L 103.45628756666666 767.5367523893331 Z"/></g></g><g><g><rect fill="white" stroke="none" x="151.24233430760418" y="868.5427594609996" width="200.190355911875" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="153.69261480260417" y="883.2444424309996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">registration done successfully.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 889.7785237509996 L 103.29293553366666 889.7785237509996" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,889.7785237509996) translate(-89.84361815,-889.7785237509996)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 882.9721890426663 L 89.84361815 889.7785237509996 L 103.45628756666666 896.584858459333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="211.41767305272137" y="919.1818896909996" width="79.83967842164063" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="213.86795354772136" y="933.8835726609996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loginForm()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 940.4176539809996 L 103.29293553366666 940.4176539809996" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,940.4176539809996) translate(-89.84361815,-940.4176539809996)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 933.6113192726663 L 89.84361815 940.4176539809996 L 103.45628756666666 947.2239886893329 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 486.33982122708335 285.3760016509999 L 486.33982122708335 969.8210199209996 L 16.335203300000003 969.8210199209996 L 16.335203300000003 285.3760016509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 16.335203300000003 304.9782456109999 L 62.694406897070316 304.9782456109999 L 72.49552887707031 295.1771236309999 L 72.49552887707031 285.3760016509999 L 16.335203300000003 285.3760016509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040660000001" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="286.68281791499993" width="76.586352005625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[empty form]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 463.4297176209999 L 486.33982122708335 463.4297176209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="464.7365338849999" width="194.59065498414063" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="476.4978802609999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email already exit]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 641.4834335909998 L 486.33982122708335 641.4834335909998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="642.7902498549997" width="196.5323206335547" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="654.5515962309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but password is weak]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 819.5371495609996 L 486.33982122708335 819.5371495609996" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="820.8439658249996" width="59.02005256714844" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="832.6053122009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[success]</text></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 470.00461792708336 334.3816115509999 L 470.00461792708336 434.0263516809999 L 32.6704066 434.0263516809999 L 32.6704066 334.3816115509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 32.6704066 353.9838555109999 L 90.09520773125 353.9838555109999 L 99.89632971125 344.1827335309999 L 99.89632971125 334.3816115509999 L 32.6704066 334.3816115509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="335.6884278149999" width="107.22293342652344" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[send empty form]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 470.00461792708336 512.4353275209999 L 470.00461792708336 612.0800676509998 L 32.6704066 612.0800676509998 L 32.6704066 512.4353275209999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 32.6704066 532.0375714809999 L 90.09520773125 532.0375714809999 L 99.89632971125 522.2364495009998 L 99.89632971125 512.4353275209999 L 32.6704066 512.4353275209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="513.7421437849998" width="130.73445381226563" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[already existed email]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 470.00461792708336 690.4890434909997 L 470.00461792708336 790.1337836209997 L 32.6704066 790.1337836209997 L 32.6704066 690.4890434909997 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 32.6704066 710.0912874509997 L 90.09520773125 710.0912874509997 L 99.89632971125 700.2901654709997 L 99.89632971125 690.4890434909997 L 32.6704066 690.4890434909997" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="691.7958597549997" width="128.71263374390625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[password not strong]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
title Company Register
participant Company
participant System
entryspacing 1.2
Company->System:startRegister()
Company<--System:register form
Company->System:fillRegisterForm(email, password,name,....)
alt empty form
loop send empty form
Company<--System:invalid form
end
else valid form, but email already exit
loop already existed email
Company<--System: email already exist, try with diffrent email
end
else valid form, but password is weak
loop password not strong
Company<--System: invalid password, enter strong password
end
else success
Company<--System: registration done successfully.
Company<--System: loginForm()
end
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="638" height="1154"><desc>title%20Jobseeker%20Login%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0AJobseeker-%3ESystem%3AstartLogin()%0AJobseeker%3C--System%3Alogin%20form%0AJobseeker-%3ESystem%3AfillLoginForm(email%2C%20password)%0A%0Aalt%20empty%20form%0Aloop%20send%20empty%20form%0AJobseeker%3C--System%3Ainvalid%20form%20%0Aend%20%0Aelse%20valid%20form%2C%20but%20email%20does%20not%20exit%0Aloop%20email%20does%20not%20exist%0A%0AJobseeker%3C--System%3A%20email%20does%20not%20exist%2C%20try%20with%20diffrent%20email%20or%20go%20to%20register%20page%0Aend%0A%0Aelse%20valid%20form%2C%20but%20email%20not%20for%20jobseeker%0Aloop%20email%20not%20for%20jobseeker%0A%0AJobseeker%3C--System%3A%20enter%20a%20diffrent%20email%2C%20or%20login%20as%20company%0Aend%0Aelse%20valid%20form%2C%20but%20email%20and%20password%20do%20not%20match%0Aloop%20email%20and%20password%20do%20not%20match%0A%0AJobseeker%3C--System%3A%20enter%20valid%20email%20and%20password%0Aend%0Aelse%20success%0AJobseeker%3C--System%3A%20login%20done%20successfully.%0Aend</desc><defs/><g><g/><g/><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="638" height="1154"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="238.55015874791667" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker Login</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 95.887643371 L 89.84361815 1154.4088172109994" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 95.887643371 L 548.7010352833333 1154.4088172109994" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 38.301044395671866 51.782594461 L 141.38619190432814 51.782594461 L 141.38619190432814 95.887643371 L 38.301044395671866 95.887643371 L 38.301044395671866 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="56.02473997617187" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 506.5392674982435 51.782594461 L 590.8628030684232 51.782594461 L 590.8628030684232 95.887643371 L 506.5392674982435 95.887643371 L 506.5392674982435 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="524.2629630787435" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="279.7497729672721" y="133.458610961" width="79.04510749878906" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="282.20005346227214" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">startLogin()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 154.694375251 L 535.2517178996667 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(548.7010352833333,154.694375251) translate(-548.7010352833333,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 535.0883658666667 147.88804054266666 L 548.7010352833333 154.694375251 L 535.0883658666667 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="284.6388110532096" y="184.09774119099998" width="69.26703132691406" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="287.08909154820964" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">login form</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 205.33350548099997 L 103.29293553366666 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,205.33350548099997) translate(-89.84361815,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 198.52717077266664 L 89.84361815 205.33350548099997 L 103.45628756666666 212.1398401893333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="217.02252382176434" y="234.73687142099996" width="204.4996057898047" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="219.47280431676432" y="249.43855439099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">fillLoginForm(email, password)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 255.97263571099995 L 535.2517178996667 255.97263571099995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(548.7010352833333,255.97263571099995) translate(-548.7010352833333,-255.97263571099995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 535.0883658666667 249.16630100266661 L 548.7010352833333 255.97263571099995 L 535.0883658666667 262.7789704193333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="277.308824480944" y="383.38722145099985" width="83.92700447144531" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="279.759104975944" y="398.0889044209998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">invalid form </text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 404.62298574099987 L 103.29293553366666 404.62298574099987" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,404.62298574099987) translate(-89.84361815,-404.62298574099987)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 397.8166510326665 L 89.84361815 404.62298574099987 L 103.45628756666666 411.4293204493332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="109.17360872166667" y="561.4409374209998" width="420.19743599" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="111.62388921666667" y="576.1426203909998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">email does not exist, try with diffrent email or go to register page</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 582.6767017109999 L 103.29293553366666 582.6767017109999" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,582.6767017109999) translate(-89.84361815,-582.6767017109999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 575.8703670026665 L 89.84361815 582.6767017109999 L 103.45628756666666 589.4830364193332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="180.4656314267448" y="739.4946533909997" width="277.6133905798437" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="182.9159119217448" y="754.1963363609997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">enter a diffrent email, or login as company</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 760.7304176809997 L 103.29293553366666 760.7304176809997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,760.7304176809997) translate(-89.84361815,-760.7304176809997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 753.9240829726664 L 89.84361815 760.7304176809997 L 103.45628756666666 767.5367523893331 Z"/></g></g><g><g><rect fill="white" stroke="none" x="215.77699464695965" y="917.5483693609996" width="206.99066413941406" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="218.22727514195964" y="932.2500523309996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">enter valid email and password</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 938.7841336509996 L 103.29293553366666 938.7841336509996" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,938.7841336509996) translate(-89.84361815,-938.7841336509996)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 931.9777989426663 L 89.84361815 938.7841336509996 L 103.45628756666666 945.5904683593329 Z"/></g></g><g><g><rect fill="white" stroke="none" x="239.95022004979168" y="1046.5964754309996" width="158.64421333375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="242.40050054479167" y="1061.2981584009997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">login done successfully.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 548.7010352833333 1067.8322397209995 L 103.29293553366666 1067.8322397209995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,1067.8322397209995) translate(-89.84361815,-1067.8322397209995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 1061.0259050126663 L 89.84361815 1067.8322397209995 L 103.45628756666666 1074.6385744293327 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 622.2094501333333 285.3760016509999 L 622.2094501333333 1097.2356056609995 L 16.335203300000003 1097.2356056609995 L 16.335203300000003 285.3760016509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 16.335203300000003 304.9782456109999 L 62.694406897070316 304.9782456109999 L 72.49552887707031 295.1771236309999 L 72.49552887707031 285.3760016509999 L 16.335203300000003 285.3760016509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040660000001" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="286.68281791499993" width="76.586352005625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[empty form]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 463.4297176209999 L 622.2094501333333 463.4297176209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="464.7365338849999" width="202.3800989538672" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="476.4978802609999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email does not exit]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 641.4834335909998 L 622.2094501333333 641.4834335909998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="642.7902498549997" width="225.1985803991797" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="654.5515962309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email not for jobseeker]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 819.5371495609996 L 622.2094501333333 819.5371495609996" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="820.8439658249996" width="285.7958856970312" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="832.6053122009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email and password do not match]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 997.5908655309995 L 622.2094501333333 997.5908655309995" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="998.8976817949995" width="59.02005256714844" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="1010.6590281709995" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[success]</text></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 605.8742468333334 334.3816115509999 L 605.8742468333334 434.0263516809999 L 32.6704066 434.0263516809999 L 32.6704066 334.3816115509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 32.6704066 353.9838555109999 L 90.09520773125 353.9838555109999 L 99.89632971125 344.1827335309999 L 99.89632971125 334.3816115509999 L 32.6704066 334.3816115509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="335.6884278149999" width="107.22293342652344" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[send empty form]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 605.8742468333334 512.4353275209999 L 605.8742468333334 612.0800676509998 L 32.6704066 612.0800676509998 L 32.6704066 512.4353275209999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 32.6704066 532.0375714809999 L 90.09520773125 532.0375714809999 L 99.89632971125 522.2364495009998 L 99.89632971125 512.4353275209999 L 32.6704066 512.4353275209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="513.7421437849998" width="124.83508552613281" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[email does not exist]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 605.8742468333334 690.4890434909997 L 605.8742468333334 790.1337836209997 L 32.6704066 790.1337836209997 L 32.6704066 690.4890434909997 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 32.6704066 710.0912874509997 L 90.09520773125 710.0912874509997 L 99.89632971125 700.2901654709997 L 99.89632971125 690.4890434909997 L 32.6704066 690.4890434909997" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="691.7958597549997" width="141.12990058960938" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[email not for jobseeker]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 868.5427594609996 L 605.8742468333334 868.5427594609996 L 605.8742468333334 968.1874995909996 L 32.6704066 968.1874995909996 L 32.6704066 868.5427594609996 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 868.5427594609996 L 32.6704066 888.1450034209996 L 90.09520773125 888.1450034209996 L 99.89632971125 878.3438814409996 L 99.89632971125 868.5427594609996 L 32.6704066 868.5427594609996" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="881.6109221009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="869.8495757249996" width="201.72722114625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="881.6109221009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[email and password do not match]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
title Jobseeker Login
participant Jobseeker
participant System
entryspacing 1.2
Jobseeker->System:startLogin()
Jobseeker<--System:login form
Jobseeker->System:fillLoginForm(email, password)
alt empty form
loop send empty form
Jobseeker<--System:invalid form
end
else valid form, but email does not exit
loop email does not exist
Jobseeker<--System: email does not exist, try with diffrent email or go to register page
end
else valid form, but email not for jobseeker
loop email not for jobseeker
Jobseeker<--System: enter a diffrent email, or login as company
end
else valid form, but email and password do not match
loop email and password do not match
Jobseeker<--System: enter valid email and password
end
else success
Jobseeker<--System: login done successfully.
end
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="502" height="1026"><desc>title%20Jobseeker%20Register%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0AJobseeker-%3ESystem%3AstartRegister()%0AJobseeker%3C--System%3Aregister%20form%0AJobseeker-%3ESystem%3AfillRegisterForm(email%2C%20password%2Cname%2C....)%0A%0Aalt%20empty%20form%0Aloop%20send%20empty%20form%0AJobseeker%3C--System%3Ainvalid%20form%20%0Aend%20%0Aelse%20valid%20form%2C%20but%20email%20already%20exit%0Aloop%20already%20existed%20email%0A%0AJobseeker%3C--System%3A%20email%20already%20exist%2C%20try%20with%20diffrent%20email%0Aend%0A%0Aelse%20valid%20form%2C%20but%20password%20is%20weak%0Aloop%20password%20not%20strong%0A%0AJobseeker%3C--System%3A%20invalid%20password%2C%20enter%20strong%20password%0Aend%0Aelse%20success%0AJobseeker%3C--System%3A%20registration%20done%20successfully.%0AJobseeker%3C--System%3A%20loginForm()%0A%0Aend</desc><defs/><g><g/><g/><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="502" height="1026"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="156.56993413854167" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker Register</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 95.887643371 L 89.84361815 1026.9942314709995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 95.887643371 L 412.83140637708334 1026.9942314709995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 38.301044395671866 51.782594461 L 141.38619190432814 51.782594461 L 141.38619190432814 95.887643371 L 38.301044395671866 95.887643371 L 38.301044395671866 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="56.02473997617187" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 370.6696385919935 51.782594461 L 454.9931741621732 51.782594461 L 454.9931741621732 95.887643371 L 370.6696385919935 95.887643371 L 370.6696385919935 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="388.3933341724935" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="202.4556216611198" y="133.458610961" width="97.76378120484375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="204.9059021561198" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">startRegister()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 154.694375251 L 399.3820889934167 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(412.83140637708334,154.694375251) translate(-412.83140637708334,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 399.21873696041666 147.88804054266666 L 412.83140637708334 154.694375251 L 399.21873696041666 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="207.7491015805534" y="184.09774119099998" width="87.17682136597656" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="210.1993820755534" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">register form</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 205.33350548099997 L 103.29293553366666 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,205.33350548099997) translate(-89.84361815,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 198.52717077266664 L 89.84361815 205.33350548099997 L 103.45628756666666 212.1398401893333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="109.17360872166667" y="234.73687142099996" width="284.32780708375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="111.62388921666667" y="249.43855439099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">fillRegisterForm(email, password,name,....)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 89.84361815 255.97263571099995 L 399.3820889934167 255.97263571099995" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(412.83140637708334,255.97263571099995) translate(-412.83140637708334,-255.97263571099995)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 399.21873696041666 249.16630100266661 L 412.83140637708334 255.97263571099995 L 399.21873696041666 262.7789704193333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="209.37401002781903" y="383.38722145099985" width="83.92700447144531" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="211.824290522819" y="398.0889044209998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">invalid form </text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 404.62298574099987 L 103.29293553366666 404.62298574099987" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,404.62298574099987) translate(-89.84361815,-404.62298574099987)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 397.8166510326665 L 89.84361815 404.62298574099987 L 103.45628756666666 411.4293204493332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="117.03331941502604" y="561.4409374209998" width="268.6083856970312" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="119.48359991002604" y="576.1426203909998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">email already exist, try with diffrent email</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 582.6767017109999 L 103.29293553366666 582.6767017109999" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,582.6767017109999) translate(-89.84361815,-582.6767017109999)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 575.8703670026665 L 89.84361815 582.6767017109999 L 103.45628756666666 589.4830364193332 Z"/></g></g><g><g><rect fill="white" stroke="none" x="118.10347932713542" y="739.4946533909997" width="266.4680658728125" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="120.55375982213542" y="754.1963363609997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">invalid password, enter strong password</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 760.7304176809997 L 103.29293553366666 760.7304176809997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,760.7304176809997) translate(-89.84361815,-760.7304176809997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 753.9240829726664 L 89.84361815 760.7304176809997 L 103.45628756666666 767.5367523893331 Z"/></g></g><g><g><rect fill="white" stroke="none" x="151.24233430760418" y="868.5427594609996" width="200.190355911875" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="153.69261480260417" y="883.2444424309996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">registration done successfully.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 889.7785237509996 L 103.29293553366666 889.7785237509996" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,889.7785237509996) translate(-89.84361815,-889.7785237509996)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 882.9721890426663 L 89.84361815 889.7785237509996 L 103.45628756666666 896.584858459333 Z"/></g></g><g><g><rect fill="white" stroke="none" x="211.41767305272137" y="919.1818896909996" width="79.83967842164063" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="213.86795354772136" y="933.8835726609996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loginForm()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 412.83140637708334 940.4176539809996 L 103.29293553366666 940.4176539809996" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(89.84361815,940.4176539809996) translate(-89.84361815,-940.4176539809996)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 103.45628756666666 933.6113192726663 L 89.84361815 940.4176539809996 L 103.45628756666666 947.2239886893329 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 486.33982122708335 285.3760016509999 L 486.33982122708335 969.8210199209996 L 16.335203300000003 969.8210199209996 L 16.335203300000003 285.3760016509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 285.3760016509999 L 16.335203300000003 304.9782456109999 L 62.694406897070316 304.9782456109999 L 72.49552887707031 295.1771236309999 L 72.49552887707031 285.3760016509999 L 16.335203300000003 285.3760016509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040660000001" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="286.68281791499993" width="76.586352005625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="298.44416429099994" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[empty form]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 463.4297176209999 L 486.33982122708335 463.4297176209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="464.7365338849999" width="194.59065498414063" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="476.4978802609999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but email already exit]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 641.4834335909998 L 486.33982122708335 641.4834335909998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="642.7902498549997" width="196.5323206335547" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="654.5515962309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[valid form, but password is weak]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203300000003 819.5371495609996 L 486.33982122708335 819.5371495609996" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="820.8439658249996" width="59.02005256714844" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="832.6053122009996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[success]</text></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 470.00461792708336 334.3816115509999 L 470.00461792708336 434.0263516809999 L 32.6704066 434.0263516809999 L 32.6704066 334.3816115509999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 334.3816115509999 L 32.6704066 353.9838555109999 L 90.09520773125 353.9838555109999 L 99.89632971125 344.1827335309999 L 99.89632971125 334.3816115509999 L 32.6704066 334.3816115509999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="335.6884278149999" width="107.22293342652344" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="347.4497741909999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[send empty form]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 470.00461792708336 512.4353275209999 L 470.00461792708336 612.0800676509998 L 32.6704066 612.0800676509998 L 32.6704066 512.4353275209999 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 512.4353275209999 L 32.6704066 532.0375714809999 L 90.09520773125 532.0375714809999 L 99.89632971125 522.2364495009998 L 99.89632971125 512.4353275209999 L 32.6704066 512.4353275209999" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="513.7421437849998" width="130.73445381226563" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="525.5034901609998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[already existed email]</text></g><g/><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 470.00461792708336 690.4890434909997 L 470.00461792708336 790.1337836209997 L 32.6704066 790.1337836209997 L 32.6704066 690.4890434909997 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 32.6704066 690.4890434909997 L 32.6704066 710.0912874509997 L 90.09520773125 710.0912874509997 L 99.89632971125 700.2901654709997 L 99.89632971125 690.4890434909997 L 32.6704066 690.4890434909997" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="49.005609899999996" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">loop</text><g><rect fill="white" stroke="none" x="113.78125251625" y="691.7958597549997" width="128.71263374390625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="116.23153301125001" y="703.5572061309997" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[password not strong]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
title Jobseeker Register
participant Jobseeker
participant System
entryspacing 1.2
Jobseeker->System:startRegister()
Jobseeker<--System:register form
Jobseeker->System:fillRegisterForm(email, password,name,....)
alt empty form
loop send empty form
Jobseeker<--System:invalid form
end
else valid form, but email already exit
loop already existed email
Jobseeker<--System: email already exist, try with diffrent email
end
else valid form, but password is weak
loop password not strong
Jobseeker<--System: invalid password, enter strong password
end
else success
Jobseeker<--System: registration done successfully.
Jobseeker<--System: loginForm()
end
\ No newline at end of file
title Search For Job
participant Jobseeker
participant System
entryspacing 1.2
Jobseeker->System: searchForJob(jobName)
alt Jobs where their names contain jobName
Jobseeker<--System: list of jobs
else No job found
Jobseeker<--System: no job found
end
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="348" height="440"><desc>title%20Search%20For%20Job%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0A%0Aentryspacing%201.2%0A%0AJobseeker-%3ESystem%3A%20searchForJob(jobName)%0A%0Aalt%20Jobs%20where%20their%20names%20contain%20jobName%0A%20%20%20%20Jobseeker%3C--System%3A%20list%20of%20jobs%0A%0Aelse%20No%20job%20found%0A%20%20%20%20Jobseeker%3C--System%3A%20no%20job%20found%0A%20%20%20%20end</desc><defs/><g><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="348" height="440"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="99.11803161979165" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Search For Job</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 95.887643371 L 73.50841485 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 275.1290155770833 95.887643371 L 275.1290155770833 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 21.965841095671863 51.782594461 L 125.05098860432813 51.782594461 L 125.05098860432813 95.887643371 L 21.965841095671863 95.887643371 L 21.965841095671863 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="39.68953667617187" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 232.96724779199343 51.782594461 L 317.2907833621731 51.782594461 L 317.2907833621731 95.887643371 L 232.96724779199343 95.887643371 L 232.96724779199343 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="250.69094337249345" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="92.83840542166662" y="133.458610961" width="162.96061958375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="95.28868591666662" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">searchForJob(jobName)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 154.694375251 L 261.67969819341664 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(275.1290155770833,154.694375251) translate(-275.1290155770833,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 261.5163461604166 147.88804054266666 L 275.1290155770833 154.694375251 L 261.5163461604166 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="139.27718715994789" y="233.103351091" width="70.0830561071875" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="141.72746765494787" y="247.805034061" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">list of jobs</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 275.1290155770833 254.339115381 L 86.95773223366666 254.339115381" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,254.339115381) translate(-73.50841485,-254.339115381)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 247.53278067266666 L 73.50841485 254.339115381 L 87.12108426666666 261.14545008933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="131.517696193151" y="332.748091221" width="85.60203804078125" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="133.967976688151" y="347.44977419099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">no job found</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 275.1290155770833 353.983855511 L 86.95773223366666 353.983855511" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,353.983855511) translate(-73.50841485,-353.983855511)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 347.17752080266666 L 73.50841485 353.983855511 L 87.12108426666666 360.79019021933334 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 332.3022271270833 184.09774119099998 L 332.3022271270833 383.387221451 L 16.335203299999996 383.387221451 L 16.335203299999996 184.09774119099998 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 16.335203299999996 203.699985151 L 62.69440689707031 203.699985151 L 72.49552887707031 193.898863171 L 72.49552887707031 184.09774119099998 L 16.335203299999996 184.09774119099998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040659999999" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="185.40455745499997" width="244.11670173707031" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[Jobs where their names contain jobName]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 283.742481321 L 332.3022271270833 283.742481321" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="285.04929758500003" width="85.0229975134375" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="296.81064396100004" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[No job found]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="357" height="440"><desc>title%20Show%20All%20Applicants%0A%0Aparticipant%20Company%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0ACompany-%3ESystem%3Ashow%D9%90AllApplicants(job_id)%0Aalt%20there%20are%20applicants%20for%20job%0ACompany%3C--System%3A%20display%20list%20of%20jobseekers%0Aelse%20no%20applicants%0ACompany%3C--System%3A%20no%20applicants%20for%20this%20job%0Aend%0A%0A</desc><defs/><g><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="357" height="440"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="82.20597565055337" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show All Applicants</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 95.887643371 L 73.50841485 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 284.11252082610673 95.887643371 L 284.11252082610673 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 24.413930695281238 51.782594461 L 122.60289900471875 51.782594461 L 122.60289900471875 95.887643371 L 24.413930695281238 95.887643371 L 24.413930695281238 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="42.137626275781244" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 241.95075304101687 51.782594461 L 326.27428861119654 51.782594461 L 326.27428861119654 95.887643371 L 241.95075304101687 95.887643371 L 241.95075304101687 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="259.6744486215169" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="92.83840542166662" y="133.458610961" width="171.94412483277344" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="95.28868591666662" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">showِAllApplicants(job_id)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 154.694375251 L 270.6632034424401 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(284.11252082610673,154.694375251) translate(-284.11252082610673,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 270.49985140944005 147.88804054266666 L 284.11252082610673 154.694375251 L 270.49985140944005 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="96.91499691336584" y="233.103351091" width="163.790941849375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="99.36527740836584" y="247.805034061" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">display list of jobseekers</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 284.11252082610673 254.339115381 L 86.95773223366666 254.339115381" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,254.339115381) translate(-73.50841485,-254.339115381)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 247.53278067266666 L 73.50841485 254.339115381 L 87.12108426666666 261.14545008933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="97.31226711600256" y="332.748091221" width="162.99640144410156" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="99.76254761100256" y="347.44977419099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">no applicants for this job</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 284.11252082610673 353.983855511 L 86.95773223366666 353.983855511" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,353.983855511) translate(-73.50841485,-353.983855511)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 347.17752080266666 L 73.50841485 353.983855511 L 87.12108426666666 360.79019021933334 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 341.28573237610675 184.09774119099998 L 341.28573237610675 383.387221451 L 16.335203299999996 383.387221451 L 16.335203299999996 184.09774119099998 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 16.335203299999996 203.699985151 L 62.69440689707031 203.699985151 L 72.49552887707031 193.898863171 L 72.49552887707031 184.09774119099998 L 16.335203299999996 184.09774119099998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040659999999" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="185.40455745499997" width="163.2839838415625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[there are applicants for job]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 283.742481321 L 341.28573237610675 283.742481321" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="285.04929758500003" width="88.31634773316406" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="296.81064396100004" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[no applicants]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
title Show All Applicants
participant Company
participant System
entryspacing 1.2
Company->System:showِAllApplicants(job_id)
alt there are applicants for job
Company<--System: display list of jobseekers
else no applicants
Company<--System: no applicants for this job
end
title Show All company Jobs
participant Company
participant System
entryspacing 1.2
Company->System:showMyJobs(company_id)
alt company do not upload any job
Company<--System: no jobs
else there are uploaded jobs by company
Company<--System: display list of jobs
end
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="364" height="440"><desc>title%20Show%20All%20company%20Jobs%0A%0Aparticipant%20Company%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0ACompany-%3ESystem%3AshowMyJobs(company_id)%0Aalt%20company%20do%20not%20upload%20any%20job%0ACompany%3C--System%3A%20no%20jobs%0Aelse%20there%20are%20uploaded%20jobs%20by%20company%0ACompany%3C--System%3A%20display%20list%20of%20jobs%0Aend%0A</desc><defs/><g><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="364" height="440"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="65.28197967887368" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show All company Jobs</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 95.887643371 L 73.50841485 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 290.61218513274736 95.887643371 L 290.61218513274736 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 24.413930695281238 51.782594461 L 122.60289900471875 51.782594461 L 122.60289900471875 95.887643371 L 24.413930695281238 95.887643371 L 24.413930695281238 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="42.137626275781244" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 248.4504173476575 51.782594461 L 332.77395291783716 51.782594461 L 332.77395291783716 95.887643371 L 248.4504173476575 95.887643371 L 248.4504173476575 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="266.1741129281575" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="92.83840542166662" y="133.458610961" width="178.44378913941406" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="95.28868591666662" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">showMyJobs(company_id)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 154.694375251 L 277.1628677490807 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(290.61218513274736,154.694375251) translate(-290.61218513274736,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 276.9995157160807 147.88804054266666 L 290.61218513274736 154.694375251 L 276.9995157160807 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="155.97366695731117" y="233.103351091" width="52.173266068125" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="158.42394745231115" y="247.805034061" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">no jobs</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 290.61218513274736 254.339115381 L 86.95773223366666 254.339115381" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,254.339115381) translate(-73.50841485,-254.339115381)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 247.53278067266666 L 73.50841485 254.339115381 L 87.12108426666666 261.14545008933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="122.16553097098303" y="332.748091221" width="119.78953804078125" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="124.61581146598303" y="347.44977419099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">display list of jobs</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 290.61218513274736 353.983855511 L 86.95773223366666 353.983855511" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,353.983855511) translate(-73.50841485,-353.983855511)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 347.17752080266666 L 73.50841485 353.983855511 L 87.12108426666666 360.79019021933334 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 347.7853966827474 184.09774119099998 L 347.7853966827474 383.387221451 L 16.335203299999996 383.387221451 L 16.335203299999996 184.09774119099998 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 16.335203299999996 203.699985151 L 62.69440689707031 203.699985151 L 72.49552887707031 193.898863171 L 72.49552887707031 184.09774119099998 L 16.335203299999996 184.09774119099998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040659999999" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="185.40455745499997" width="189.31566108765625" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[company do not upload any job]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 283.742481321 L 347.7853966827474 283.742481321" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/><g><rect fill="white" stroke="none" x="86.38045168207032" y="285.04929758500003" width="216.7333704382422" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="296.81064396100004" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[there are uploaded jobs by company]</text></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="302" height="440"><desc>title%20Display%20All%20Jobs%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0AJobseeker-%3ESystem%3AshowAllJobs()%0Aalt%20there%20are%20uploaded%20jobs%0AJobseeker%3C--System%3A%20list%20of%20jobs%0A%0Aelse%20%0AJobseeker%3C--System%3A%20no%20uploaded%20jobs%0A%0Aend%0A</desc><defs/><g><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="302" height="440"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="73.4870120275065" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Display All Jobs</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 95.887643371 L 73.50841485 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 228.74392951751298 95.887643371 L 228.74392951751298 440.56043300100004" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 21.965841095671863 51.782594461 L 125.05098860432813 51.782594461 L 125.05098860432813 95.887643371 L 21.965841095671863 95.887643371 L 21.965841095671863 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="39.68953667617187" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 186.58216173242312 51.782594461 L 270.9056973026028 51.782594461 L 270.9056973026028 95.887643371 L 186.58216173242312 95.887643371 L 186.58216173242312 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="204.30585731292314" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="103.05315761893225" y="133.458610961" width="96.14602912964844" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="105.50343811393225" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">showAllJobs()</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 73.50841485 154.694375251 L 215.29461213384633 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(228.74392951751298,154.694375251) translate(-228.74392951751298,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 215.1312601008463 147.88804054266666 L 228.74392951751298 154.694375251 L 215.1312601008463 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="116.08464413016272" y="233.103351091" width="70.0830561071875" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="118.53492462516272" y="247.805034061" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">list of jobs</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 228.74392951751298 254.339115381 L 86.95773223366666 254.339115381" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,254.339115381) translate(-73.50841485,-254.339115381)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 247.53278067266666 L 73.50841485 254.339115381 L 87.12108426666666 261.14545008933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="92.83840542166662" y="332.748091221" width="116.57553352417969" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="95.28868591666662" y="347.44977419099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">no uploaded jobs</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 228.74392951751298 353.983855511 L 86.95773223366666 353.983855511" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(73.50841485,353.983855511) translate(-73.50841485,-353.983855511)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 87.12108426666666 347.17752080266666 L 73.50841485 353.983855511 L 87.12108426666666 360.79019021933334 Z"/></g></g><g><g/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 285.917141067513 184.09774119099998 L 285.917141067513 383.387221451 L 16.335203299999996 383.387221451 L 16.335203299999996 184.09774119099998 Z" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 184.09774119099998 L 16.335203299999996 203.699985151 L 62.69440689707031 203.699985151 L 72.49552887707031 193.898863171 L 72.49552887707031 184.09774119099998 L 16.335203299999996 184.09774119099998" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray=""/><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="32.67040659999999" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">alt</text><g><rect fill="white" stroke="none" x="86.38045168207032" y="185.40455745499997" width="145.0303675085547" height="16.988611432000003"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="8.8pt" font-style="normal" font-weight="bold" text-decoration="normal" x="88.83073217707032" y="197.16590383099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">[there are uploaded jobs]</text><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 16.335203299999996 283.742481321 L 285.917141067513 283.742481321" stroke-miterlimit="10" stroke-width="2.3336004714285714" stroke-dasharray="4.083800825"/></g><g/></g><g/></g><g/><g/></g></svg>
\ No newline at end of file
title Display All Jobs
participant Jobseeker
participant System
entryspacing 1.2
Jobseeker->System:showAllJobs()
alt there are uploaded jobs
Jobseeker<--System: list of jobs
else
Jobseeker<--System: no uploaded jobs
end
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="380" height="262"><desc>title%20Show%20Applicant%20Profile%0A%0Aparticipant%20Company%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0ACompany-%3ESystem%3Ashow%D9%90ApplicantProfile(jobseeker_id)%0A%0ACompany%3C--System%3A%20display%20applicant%20profile%0A%0A</desc><defs/><g><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="380" height="262"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="80.00503768803583" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show Applicant Profile</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 57.26208580471876 95.887643371 L 57.26208580471876 262.506717031" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 329.7988700034818 95.887643371 L 329.7988700034818 262.506717031" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 8.167601650000002 51.782594461 L 106.35656995943751 51.782594461 L 106.35656995943751 95.887643371 L 8.167601650000002 95.887643371 L 8.167601650000002 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="25.891297230500008" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Company</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 287.63710221839193 51.782594461 L 371.9606377885716 51.782594461 L 371.9606377885716 95.887643371 L 287.63710221839193 95.887643371 L 287.63710221839193 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="305.36079779889195" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="76.59207637638544" y="133.458610961" width="233.8768030554297" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="79.04235687138544" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">showِApplicantProfile(jobseeker_id)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 57.26208580471876 154.694375251 L 316.34955261981514 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(329.7988700034818,154.694375251) translate(-329.7988700034818,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 316.1862005868151 147.88804054266666 L 329.7988700034818 154.694375251 L 316.1862005868151 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="114.88482387394403" y="184.09774119099998" width="157.2913080603125" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="117.33510436894403" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">display applicant profile</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 329.7988700034818 205.33350548099997 L 70.71140318838542 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(57.26208580471876,205.33350548099997) translate(-57.26208580471876,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 70.87475522138543 198.52717077266664 L 57.26208580471876 205.33350548099997 L 70.87475522138543 212.1398401893333 Z"/></g></g></g><g/><g/></g></svg>
\ No newline at end of file
title Show Applicant Profile
participant Company
participant System
entryspacing 1.2
Company->System:showِApplicantProfile(jobseeker_id)
Company<--System: display applicant profile
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="305" height="262"><desc>title%20Show%20Job%20Details%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0AJobseeker-%3ESystem%3A%20showJobDetails(job_id)%0A%0AJobseeker%3C--System%3A%20job%20details%0A%0A%0A</desc><defs/><g><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="305" height="262"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="67.59343185307486" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show Job Details</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 59.71017540432813 95.887643371 L 59.71017540432813 262.506717031" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 254.8311270835599 95.887643371 L 254.8311270835599 262.506717031" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 8.167601650000002 51.782594461 L 111.25274915865626 51.782594461 L 111.25274915865626 95.887643371 L 8.167601650000002 95.887643371 L 8.167601650000002 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="25.891297230500008" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 212.66935929847006 51.782594461 L 296.9928948686497 51.782594461 L 296.9928948686497 95.887643371 L 212.66935929847006 95.887643371 L 212.66935929847006 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="230.39305487897005" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="79.04016597599478" y="133.458610961" width="156.46097053589844" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="81.49044647099478" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">showJobDetails(job_id)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 59.71017540432813 154.694375251 L 241.3818096998932 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(254.8311270835599,154.694375251) translate(-254.8311270835599,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 241.21845766689322 147.88804054266666 L 254.8311270835599 154.694375251 L 241.21845766689322 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="121.81394679874869" y="184.09774119099998" width="70.91340889039063" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="124.26422729374869" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">job details</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 254.8311270835599 205.33350548099997 L 73.1594927879948 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(59.71017540432813,205.33350548099997) translate(-59.71017540432813,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 73.3228448209948 198.52717077266664 L 59.71017540432813 205.33350548099997 L 73.3228448209948 212.1398401893333 Z"/></g></g></g><g/><g/></g></svg>
\ No newline at end of file
title Show Job Details
participant Jobseeker
participant System
entryspacing 1.2
Jobseeker->System: showJobDetails(job_id)
Jobseeker<--System: job details
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="341" height="262"><desc>title%20display%20jobseeker%20profile%0A%0Aparticipant%20Jobseeker%0Aparticipant%20System%0A%0A%0Aentryspacing%201.2%0AJobseeker-%3ESystem%3AshowMyProfile(jobseeker_id)%0AJobseeker%3C--System%3A%20display%20profile%0A</desc><defs/><g><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="341" height="262"/></g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16.5pt" font-style="normal" font-weight="normal" text-decoration="normal" x="52.896913908738924" y="24.50280495" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">display jobseeker profile</text></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 59.71017540432813 95.887643371 L 59.71017540432813 262.506717031" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 291.481059944888 95.887643371 L 291.481059944888 262.506717031" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 8.167601650000002 51.782594461 L 111.25274915865626 51.782594461 L 111.25274915865626 95.887643371 L 8.167601650000002 95.887643371 L 8.167601650000002 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="25.891297230500008" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Jobseeker</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 249.31929215979812 51.782594461 L 333.64282772997785 51.782594461 L 333.64282772997785 95.887643371 L 249.31929215979812 95.887643371 L 249.31929215979812 51.782594461 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="267.04298774029814" y="79.55244007099999" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">System</text></g></g><g><g><g><rect fill="white" stroke="none" x="79.04016597599478" y="133.458610961" width="193.11090339722656" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="81.49044647099478" y="148.16029393099998" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">showMyProfile(jobseeker_id)</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 59.71017540432813 154.694375251 L 278.03174256122134 154.694375251" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(291.481059944888,154.694375251) translate(-291.481059944888,-154.694375251)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 277.8683905282213 147.88804054266666 L 291.481059944888 154.694375251 L 277.8683905282213 161.50070995933334 Z"/></g></g><g><g><rect fill="white" stroke="none" x="128.32790096134636" y="184.09774119099998" width="94.53543342652344" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="130.77818145634635" y="198.79942416099996" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">display profile</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 291.481059944888 205.33350548099997 L 73.1594927879948 205.33350548099997" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="6.53408132"/><g transform="translate(59.71017540432813,205.33350548099997) translate(-59.71017540432813,-205.33350548099997)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 73.3228448209948 198.52717077266664 L 59.71017540432813 205.33350548099997 L 73.3228448209948 212.1398401893333 Z"/></g></g></g><g/><g/></g></svg>
\ No newline at end of file
title display jobseeker profile
participant Jobseeker
participant System
entryspacing 1.2
Jobseeker->System:showMyProfile(jobseeker_id)
Jobseeker<--System: display profile
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1113px" height="603px" viewBox="-0.5 -0.5 1113 603" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2023-08-25T11:18:38.418Z&quot; agent=&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36&quot; etag=&quot;ITngD-W0d_CKaSB9hZv1&quot; version=&quot;21.6.8&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;iqmnvPPDBjObOgFgY0zN&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;1862&quot; dy=&quot;562&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-2&quot; value=&quot;user&quot; style=&quot;shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;20&quot; y=&quot;230&quot; width=&quot;30&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-4&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;640&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;40&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-25&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; target=&quot;3zl06t-drH2GxTPhP-Jz-26&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;80&quot; y=&quot;260&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;220&quot; y=&quot;320&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;100&quot; y=&quot;260&quot; /&gt;&#10; &lt;mxPoint x=&quot;140&quot; y=&quot;260&quot; /&gt;&#10; &lt;mxPoint x=&quot;140&quot; y=&quot;400&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-26&quot; value=&quot;استعراض لمحة عامة عن التطبيق&quot; style=&quot;strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;610&quot; y=&quot;370&quot; width=&quot;100&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-56&quot; value=&quot;&amp;amp;lt;&amp;amp;lt;extend&amp;amp;gt;&amp;amp;gt;&quot; style=&quot;endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;3zl06t-drH2GxTPhP-Jz-68&quot; target=&quot;3zl06t-drH2GxTPhP-Jz-81&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;160&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;1069&quot; y=&quot;407.3999999999998&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;710&quot; y=&quot;340.00000000000017&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-68&quot; value=&quot;استعراض الملف الشخص لطالب وظيفة&quot; style=&quot;strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;940&quot; y=&quot;270&quot; width=&quot;100&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-77&quot; value=&quot;استعراض جميع المستخدمين&quot; style=&quot;strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;420&quot; y=&quot;170&quot; width=&quot;100&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-78&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; target=&quot;3zl06t-drH2GxTPhP-Jz-77&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;80&quot; y=&quot;230&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;220&quot; y=&quot;200&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;140&quot; y=&quot;230&quot; /&gt;&#10; &lt;mxPoint x=&quot;140&quot; y=&quot;200&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-79&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.145;exitY=0.145;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.855;entryY=0.855;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;3zl06t-drH2GxTPhP-Jz-81&quot; target=&quot;3zl06t-drH2GxTPhP-Jz-77&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;627&quot; y=&quot;280.01&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;450&quot; y=&quot;199.99&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-81&quot; value=&quot;استعراض جميع طالبي الوظيفة&quot; style=&quot;strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;610&quot; y=&quot;270&quot; width=&quot;100&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-82&quot; value=&quot;استعراض جميع الشركات&quot; style=&quot;strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;610&quot; y=&quot;80&quot; width=&quot;100&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-84&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.145;exitY=0.855;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.855;entryY=0.145;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;3zl06t-drH2GxTPhP-Jz-82&quot; target=&quot;3zl06t-drH2GxTPhP-Jz-77&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;600&quot; y=&quot;160&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;470&quot; y=&quot;150&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-110&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;1080&quot; y=&quot;640&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;1080&quot; y=&quot;40&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-111&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;40&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;1080&quot; y=&quot;41&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;3zl06t-drH2GxTPhP-Jz-112&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;640&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;1080&quot; y=&quot;640&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;g6Pb4IOhV1GrM6sl8xfY-5&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint y=&quot;520&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;20&quot; y=&quot;320&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;g6Pb4IOhV1GrM6sl8xfY-6&quot; value=&quot;jobseeker&quot; style=&quot;shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;-20&quot; y=&quot;540&quot; width=&quot;30&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;g6Pb4IOhV1GrM6sl8xfY-7&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;&quot; edge=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;110&quot; y=&quot;520&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;50&quot; y=&quot;320&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;g6Pb4IOhV1GrM6sl8xfY-8&quot; value=&quot;company&quot; style=&quot;shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;100&quot; y=&quot;540&quot; width=&quot;30&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;g6Pb4IOhV1GrM6sl8xfY-10&quot; value=&quot;&amp;amp;lt;&amp;amp;lt;extend&amp;amp;gt;&amp;amp;gt;&quot; style=&quot;endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;&quot; edge=&quot;1&quot; parent=&quot;1&quot; source=&quot;g6Pb4IOhV1GrM6sl8xfY-11&quot; target=&quot;3zl06t-drH2GxTPhP-Jz-82&quot;&gt;&#10; &lt;mxGeometry width=&quot;160&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;930&quot; y=&quot;109.41&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;710&quot; y=&quot;109&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;g6Pb4IOhV1GrM6sl8xfY-11&quot; value=&quot;استعراض الملف الشخص لشركة&amp;lt;br&amp;gt;&quot; style=&quot;strokeWidth=2;html=1;shape=mxgraph.flowchart.start_1;whiteSpace=wrap;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;940&quot; y=&quot;80&quot; width=&quot;100&quot; height=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><ellipse cx="65" cy="197.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 65 205 L 65 230 M 65 210 L 50 210 M 65 210 L 80 210 M 65 230 L 50 250 M 65 230 L 80 250" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 257px; margin-left: 65px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">user</div></div></div></foreignObject><text x="65" y="269" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">user</text></switch></g><path d="M 190 600 L 190 0" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 110 220 L 130 220 L 170 220 L 170 360 L 633.63 360" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 638.88 360 L 631.88 363.5 L 633.63 360 L 631.88 356.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="690" cy="360" rx="50" ry="30" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 360px; margin-left: 641px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">استعراض لمحة عامة عن التطبيق</div></div></div></foreignObject><text x="690" y="364" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">استعراض لمحة عامة عن التطبيق</text></switch></g><path d="M 970 260 L 742.24 260" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 754.12 253.5 L 741.12 260 L 754.12 266.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 260px; margin-left: 855px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">&lt;&lt;extend&gt;&gt;</div></div></div></foreignObject><text x="855" y="263" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">&lt;&lt;extend&gt;&gt;</text></switch></g><ellipse cx="1020" cy="260" rx="50" ry="30" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 260px; margin-left: 971px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">استعراض الملف الشخص لطالب وظيفة</div></div></div></foreignObject><text x="1020" y="264" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">استعراض الملف الشخص لطالب وظيفة</text></switch></g><ellipse cx="500" cy="160" rx="50" ry="30" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 160px; margin-left: 451px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">استعراض جميع المستخدمين</div></div></div></foreignObject><text x="500" y="164" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">استعراض جميع المستخدمين</text></switch></g><path d="M 110 190 L 170 190 L 170 160 L 443.63 160" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 448.88 160 L 441.88 163.5 L 443.63 160 L 441.88 156.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 654.5 238.7 L 541.24 184.07" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 536.51 181.79 L 544.33 181.67 L 541.24 184.07 L 541.29 187.98 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="690" cy="260" rx="50" ry="30" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 260px; margin-left: 641px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">استعراض جميع طالبي الوظيفة</div></div></div></foreignObject><text x="690" y="264" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">استعراض جميع طالبي الوظيفة</text></switch></g><ellipse cx="690" cy="70" rx="50" ry="30" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 70px; margin-left: 641px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">استعراض جميع الشركات</div></div></div></foreignObject><text x="690" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">استعراض جميع الشركات</text></switch></g><path d="M 654.5 91.3 L 541.42 136.34" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 536.54 138.29 L 541.75 132.44 L 541.42 136.34 L 544.34 138.95 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 1110 600 L 1110 0" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 0 L 1110 1" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 600 L 1110 600" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 30 480 L 49.37 286.34" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 49.89 281.11 L 52.67 288.43 L 49.37 286.34 L 45.71 287.73 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="25" cy="507.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 25 515 L 25 540 M 25 520 L 10 520 M 25 520 L 40 520 M 25 540 L 10 560 M 25 540 L 40 560" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 567px; margin-left: 25px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">jobseeker</div></div></div></foreignObject><text x="25" y="579" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">jobse...</text></switch></g><path d="M 140 480 L 81.83 286.1" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 80.32 281.07 L 85.69 286.77 L 81.83 286.1 L 78.98 288.78 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="145" cy="507.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 145 515 L 145 540 M 145 520 L 130 520 M 145 520 L 160 520 M 145 540 L 130 560 M 145 540 L 160 560" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 567px; margin-left: 145px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">company</div></div></div></foreignObject><text x="145" y="579" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">compa...</text></switch></g><path d="M 970 70 L 742.24 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 754.12 63.5 L 741.12 70 L 754.12 76.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 70px; margin-left: 855px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">&lt;&lt;extend&gt;&gt;</div></div></div></foreignObject><text x="855" y="73" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">&lt;&lt;extend&gt;&gt;</text></switch></g><ellipse cx="1020" cy="70" rx="50" ry="30" fill="#dae8fc" stroke="#6c8ebf" stroke-width="2" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 70px; margin-left: 971px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">استعراض الملف الشخص لشركة<br /></div></div></div></foreignObject><text x="1020" y="74" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">استعراض الملف الشخص لشركة&#xa;</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment