< Summary - Syki

Information
Class: Syki.Front.Pages.Cross.UserAccountPage
Assembly: Front
File(s): /home/runner/work/syki/syki/Front/Pages/Cross/UserAccountPage.razor
Tag: 4_16869239191
Line coverage
0%
Covered lines: 0
Uncovered lines: 30
Coverable lines: 30
Total lines: 106
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%210%
OnInitializedAsync()100%210%
UploadProfilePhoto()0%2040%
UpdateUserAccountData()0%620%

File(s)

/home/runner/work/syki/syki/Front/Pages/Cross/UserAccountPage.razor

#LineLine coverage
 1@using Syki.Front.Features.Cross.SetupMfa
 2@using Syki.Front.Features.Cross.GetMfaKey
 3
 4@namespace Syki.Front.Pages.Cross
 5
 6@page "/account"
 7
 8<SykiPageTitle Title="Conta" />
 9
 10<MudContainer Class="mt-10 px-4" MaxWidth="MaxWidth.Small">
 11    <MudContainer Class="px-0 mb-4">
 12        <MudGrid Spacing="4">
 13            <MudItem xs="12" sm="12" md="12" lg="12">
 14                <MudStack Row Justify="Justify.Center">
 15                    <MudStack Spacing="2">
 16                        <style>
 17                            .mud-badge.mud-badge-icon .mud-icon-badge {
 18                                font-size: 18px;
 19                            }
 20                        </style>
 21                        <MudFileUpload T="IBrowserFile" OnFilesChanged="@UploadProfilePhoto" MaximumFileCount="1">
 22                            <ActivatorContent>
 23                                <MudBadge Icon="@Icons.Material.Filled.Edit" Color="Color.Primary" Overlap="true" Origin
 24                                    <MudImage ObjectFit="ObjectFit.Cover" Style="border-radius: 50%;" Width="180" Height
 25                                </MudBadge>
 26                            </ActivatorContent>
 27                        </MudFileUpload>
 028                        <MudText Typo="Typo.h5" Style="font-weight: bold" Class="ml-2">@_data.Name</MudText>
 029                        <MudText Class="ml-2" Style="margin-top: -8px;">@_data.Role.GetDescription()</MudText>
 30                    </MudStack>
 31                </MudStack>
 32            </MudItem>
 33            <MudItem xs="12" sm="12" md="12" lg="12">
 34                <InfoCard Icon="@Icons.Material.Filled.Email" Title="Email" Content="@_data.Email" />
 35            </MudItem>
 036            @if (_data.Course.HasValue())
 37            {
 38                <MudItem xs="12" sm="12" md="12" lg="12">
 39                    <InfoCard Icon="@Icons.Material.Filled.Class" Title="Curso" Content="@_data.Course" />
 40                </MudItem>
 41            }
 42            <MudItem xs="12" sm="12" md="12" lg="12">
 43                <InfoCard Icon="@Icons.Material.Filled.School" Title="Instituição" Content="@_data.Institution" />
 44            </MudItem>
 45        </MudGrid>
 46    </MudContainer>
 47</MudContainer>
 48
 49@inject ISnackbar Snackbar
 50@inject GetUserAccountClient GetUserAccountClient
 51@inject IBrowserViewportService BrowserViewportService
 52@inject UpdateUserAccountClient UpdateUserAccountClient
 53@inject CreatePreSignedUrlForUploadClient CreatePreSignedUrlForUploadClient
 54
 55
 56@code
 57{
 058    private GetUserAccountOut _data = new();
 59
 60    protected override async Task OnInitializedAsync()
 61    {
 062        _data = await GetUserAccountClient.Get();
 063    }
 64
 065    private long _maxFileSize = 2 * 1024 * 1024;
 66    private async Task UploadProfilePhoto(InputFileChangeEventArgs evt)
 67    {
 068        if (evt.File.Size > _maxFileSize)
 69        {
 070            Snackbar.Add("O tamanho máximo permitido é de 2Mb", Severity.Error);
 071            return;
 72        }
 73
 074        var data = evt.File.OpenReadStream(maxAllowedSize: _maxFileSize);
 075        var memoryStream = new MemoryStream();
 076        await data.CopyToAsync(memoryStream);
 077        memoryStream.Seek(0, SeekOrigin.Begin);
 78
 079        var randomFileName = $"{Guid.CreateVersion7().ToHashCode().ToString()}.{evt.File.Name.Split(".").Last()}";
 080        var responseUrl = await CreatePreSignedUrlForUploadClient.Create(StorageContainer.ProfilePhotos, randomFileName)
 081        var url = responseUrl.IsSuccess ? responseUrl.Success.Url : "";
 82
 083        using var httpClient = new HttpClient() { BaseAddress = new Uri(url) };
 084        httpClient.DefaultRequestHeaders.Add("x-ms-blob-type", "BlockBlob");
 085        await httpClient.PutAsync("", new StreamContent(memoryStream));
 86
 087        _data.ProfilePhoto = url.Split("?").First();
 88
 089        await UpdateUserAccountData();
 090    }
 91
 92    private async Task UpdateUserAccountData()
 93    {
 094        var response = await UpdateUserAccountClient.Update(_data.Name, _data.ProfilePhoto);
 095        if (response.IsSuccess)
 96        {
 097            await OnInitializedAsync();
 098            Snackbar.Add("Foto atualizada com sucesso!", Severity.Success);
 99        }
 100        else
 101        {
 0102            var error = response.Error;
 0103            Snackbar.Add(error.Message, Severity.Error);
 104        }
 0105    }
 106}